Perl は同じことが出来るコードでも、幾通りも書き方があるところが凄く気に入っています。もっともっといろんな書き方を試してみたくてしょうがありません!
そこで、 Perl のトリッキーなワンライナーを教えてください。意味のないプログラムでオッケーです。へー!こんなことできるんだ!っていう感動を味わいたいんです。
以下、回答条件です。
-プログラムは 1行 200文字以内でお願いします。
-何が出来るプログラムでどういう仕組みかも教えていただけると嬉しいです。
-いろいろな人の回答を見たいので回答は一人ひとつまでとさせてください。
おもしろいプログラムほど、ポイントを弾みます。
それでは、よろしくお願いいたします。
定番ですけど。
@data = map {$_->[0]} sort {$a->[1] cmp $b->[1] or $b->[2] <=> $a->[2]} map {[$_, split /,/]} @data;
@data の中身を、第1項でソートし、さらに第2項で降順ソートする というプログラムです。
解説はこちらで。
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head><title>love</title></head>\n";
print "<body>amachang カッコイイ</body>\n";
print "</html>\n";
exit;
ポイントは要りません。
ムカムカ
しかも一行じゃないし
以下、まじめにお願いします。
定番ですけど。
@data = map {$_->[0]} sort {$a->[1] cmp $b->[1] or $b->[2] <=> $a->[2]} map {[$_, split /,/]} @data;
@data の中身を、第1項でソートし、さらに第2項で降順ソートする というプログラムです。
解説はこちらで。
おおおお。なるほど。これは頭の体操になりますね!
最初に map で [$_, split /,/]という冗長なデータを作ってから複雑なソートをするんですね!すごい!
オリジナルじゃなくてすみません。そして多分ワンライナーじゃなくてすみません。
Effective Perl
http://www.ascii.co.jp/bookmart/pdf/47561/4756130577.pdf
のp.61にある「シャチ泳ぎ」なんてどうでしょうか。
ので気に入っています。
P.63のShwartz変換も結構おもしろいです。
情報ありがとうございます。
||= はよく使うのですが、ソートとかで重い処理をする場合には意識的に使おうと思いました^^
use strictとか当然無しでお願いします。
not exp log srand xor s qq qx xor s x x length uc ord and print chr ord for qw q join use sub tied qx xor eval xor print qq q q xor int eval lc q m cos and print chr ord for qw y abs ne open tied hex exp ref y m xor scalar srand print qq q q xor int eval lc qq y sqrt cos and print chr ord for qw x printf each return local x y or print qq s s and eval q s undef or oct xor time xor ref print chr int ord lc foreach qw y hex alarm chdir kill exec return y s gt sin sort split
これちょっとずるいかなー?
ちょwwすごいなww てか、微妙にワンライナーじゃない気が・・・・。
おおおお。なるほど。これは頭の体操になりますね!
最初に map で [$_, split /,/]という冗長なデータを作ってから複雑なソートをするんですね!すごい!