Subscribed unsubscribe Subscribe Subscribe

Perl5.14でなくても配列操作関数にリファレンスを受け付けさせる

Perl5.14を使ったことのある方*1は、配列やハッシュのための関数群がリファレンスを受け付ける機能の便利さに感動を覚えたのではないかと思いますが、5.14でなくてもこの機能を使えるようにしたかったので、それを可能にするモジュールを作っています。
https://github.com/Cside/List-AcceptReference

use List::AcceptReference qw/:all/;

my $arrayref = [1..3];

push    $arrayref, 4;
unshift $arrayref, 5;
pop     $arrayref;
shift   $arrayref;

# もちろん通常の配列も受け付ける
my @array = 1..3;
push    @array, 4;
unshift @array, 5;
pop     @array;
shift   @array;

【追記: 12/07 16:37】

以下が実装済みです。

  • pop
  • push
  • shift
  • unshift
  • splice
  • keys
  • values
  • each


mapにも手をつけてみたのですが、なぜか CORE::map が勝手に使われてしまう謎の現象にはまってしまい、挫折中です。。。

use List::AcceptReference qw/map/;

my @array = (1..3);
map { $_ + 1 } @array;  #=> CORE::map が呼ばれてしまう!!

今のところは

  • pop
  • push
  • shift
  • unshift
  • splice

だけですが、この勢いで

  • keys
  • values
  • each

と、それから本家ではサポートしていませんが

も(配列|ハッシュ)リファレンスを受け付けるものを作ってみようかなと考えています。


実装にあたりアドバイスをくださった id:Yuichirou さん、ありがとうございました。

*1:[http://q.hatena.ne.jp/1322882763:title=えらい割合]いてびっくりしました。