Perlの好きなところ・便利なところ
Perl 6 チュートリアル 9日目:引数と引数渡し - ヤルキデナイズドだった
Perl6では配列がデフォルトではフラットに展開されないらしい。
Perlの素晴らしい所の一つなのに・・・と思ったけどやっぱりフラットに展開するようにもできるみたい。
単項の|なんてまたややこしくなりそうな記号を(ry
利点としては、これのおかげでapplyの必要がない点とか。
あとmap関数で配列からハッシュ*1へ変換したり、またその逆のほとんどがsplit, join, mapの組み合わせで可能だったりする。
my $header = <<EOH; Foo-Header: bar Hoge-Header: uboa EOH # RubyとかPythonとか、配列がリファレンス(オブジェクト?)な言語だったら # map中でsplitしたら[[key => val], [key2 => val2], ...]ってならない? # いや実はよく知らないんだけど... # # my %header = map { # split /:\s*/ # } split /\n/, $header; # # ・・・あ、上のだと値に「:」があった場合キーと値が1対1にならなくなるな。 # じゃ、正規表現で。 # my %header = map { /^ ([^:]+) : \s* (.*) $/x; ($1, $2); } split /\n/, $header; my $key_val = "foo\0bar\0hoge\0uboa"; my %key_val = split /\0/, $key_val; # もしリファレンスを含むならTie::RefHash使えばリファレンスもキーとして使える my %val_key = reverse %key_val;
grepだってmapで代用可能だしね。
my @one_to_ten = 1..10; my @odd = grep { $_ % 2 } @one_to_ten; # my @odd = map { $_ % 2 ? $_ : () } @one_to_ten;
こんな風にテキストから配列、ハッシュへの変換がめちゃくちゃ楽なのは、この配列の仕様、それとハッシュと配列がシームレスに変換可能なのが理由だと思う。
シュワルツ変換とかめっちゃ楽。
・・・あとはPerl6で
とか色々できると素晴らしいと思う。
*1:これは実際は(キー => 値, ...)という配列と同じ。