Perl分かってない
#!/usr/bin/perl use strict; use warnings; my @list = ('apple', 'banana', 'orange'); my @list2 = @list; map { s/a/A/g } @list; print join("\n", @list), "\n\n"; # Apple - bAnAnA - orAnge print join("\n", map { s/a/A/g } @list2), "\n"; # 1 - 3 - 1
後者の動作が理解出来てない。きっとすごく基本的なことなんだけど。
print join("\n", map { "[$_]" } @list2), "\n";
だと、それぞれを[]でくくった配列が表示されるんだけど、正規表現でほげるとダメ。1行で書けないのかな。書く方法はあると思うんだが…
以下、追記。
id:kazukichopさんからトラバもらったので、せっかくだからもう少し書いてみる。
実際のところ、手段を問わなければ
my @list3 = ('apple', 'banana', 'orange'); print join("\n", sub { map { s/a/A/g } @_; return @_}->(@list3)),"\n";
とかやってしまえば1行で書けるのは書ける。とは言え、結局やってることは関数作って、そいつを通してるだけだからあくまで形式上1行になっているだけ。もっとシンプルに書けそうなもんだけど、どうしたらいいんだろね。
あと、Perlでは@_は引数へのリファレンスになってるらしく、上のを実行すると@list3の内容が変わる。無名関数の中で、my (@ar)=@_; とか書いてそいつを使えば非破壊で書ける。忘れそうなので、今のうちに書いておく。
更に追記。
id:hibomaさんが教えてくれたよ!
print join "\n", map { s/a/A/g; $_ } @list;
これでぉk。ドクターペッパーで有名な某社の人からコメントもらえるなんて光栄です!