ちなみに

火曜日の空は僕を押しつぶした。

Perl で map した結果をリファレンスにする話。

2015年だけれど Perl の話を書きます。

Perl には map とか grep とかのべんりな組み込みの関数があって、いわゆる map とか filter といったことが出来る。しかし、こいつらは Array Context で値を返すので、リファレンスが欲しいときは困る。

なんか率直に書くと以下のような感じになる。

配列のリファレンスならこんな感じ。

my $array = [1, 2, 3, 4, 5];
my $array2 = [ map { $_ * 2 } @$array ];

ハッシュならこんな感じ。

my $hash = { a => 1, b => 2 };
my $hash2 = { map { $_ => $hash->{$_} * 2 } keys %$hash };

しかし、どうにも分かりにくい。

特にコードが長くなる場合は、{ ... } が何を意味しているのかを初見で判断するのはけっこう慣れが要りそうに思う。

my $admin_map = {
  map { $_->id => $_ }
  grep { $_->isAadmin }
  @$users
};

+{ ... } と書くとハッシュリファレンスであることを明示出来るけれど、見た目がダサい。

なんかもっとスマートに書ける方法はないのだろうか。