最近 Perl の勉強をしているものです。


Perl は同じことが出来るコードでも、幾通りも書き方があるところが凄く気に入っています。もっともっといろんな書き方を試してみたくてしょうがありません!

そこで、 Perl のトリッキーなワンライナーを教えてください。意味のないプログラムでオッケーです。へー!こんなことできるんだ!っていう感動を味わいたいんです。

以下、回答条件です。
-プログラムは 1行 200文字以内でお願いします。
-何が出来るプログラムでどういう仕組みかも教えていただけると嬉しいです。
-いろいろな人の回答を見たいので回答は一人ひとつまでとさせてください。

おもしろいプログラムほど、ポイントを弾みます。
それでは、よろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2006/10/21 06:42:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ootatmt No.2

回答回数1307ベストアンサー獲得回数65

ポイント100pt

定番ですけど。

@data = map {$_->[0]} sort {$a->[1] cmp $b->[1] or $b->[2] <=> $a->[2]} map {[$_, split /,/]} @data;

@data の中身を、第1項でソートし、さらに第2項で降順ソートする というプログラムです。


解説はこちらで。

http://www.din.or.jp/~ohzaki/perl.htm#SortMulti

id:amachang

おおおお。なるほど。これは頭の体操になりますね!

最初に map で [$_, split /,/]という冗長なデータを作ってから複雑なソートをするんですね!すごい!

2006/10/16 15:56:53

その他の回答3件)

id:dropdb No.1

回答回数4ベストアンサー獲得回数0

ポイント1pt

#!/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;

ポイントは要りません。

id:amachang

ムカムカ

しかも一行じゃないし

以下、まじめにお願いします。

2006/10/16 15:29:08
id:ootatmt No.2

回答回数1307ベストアンサー獲得回数65ここでベストアンサー

ポイント100pt

定番ですけど。

@data = map {$_->[0]} sort {$a->[1] cmp $b->[1] or $b->[2] <=> $a->[2]} map {[$_, split /,/]} @data;

@data の中身を、第1項でソートし、さらに第2項で降順ソートする というプログラムです。


解説はこちらで。

http://www.din.or.jp/~ohzaki/perl.htm#SortMulti

id:amachang

おおおお。なるほど。これは頭の体操になりますね!

最初に map で [$_, split /,/]という冗長なデータを作ってから複雑なソートをするんですね!すごい!

2006/10/16 15:56:53
id:k12u No.3

回答回数80ベストアンサー獲得回数7

ポイント20pt

オリジナルじゃなくてすみません。そして多分ワンライナーじゃなくてすみません。

Effective Perl

http://www.ascii.co.jp/bookmart/pdf/47561/4756130577.pdf

のp.61にある「シャチ泳ぎ」なんてどうでしょうか。

  • 記述が変態的なのと
  • 効率がいいのと
  • いろいろと応用がきく(たったこれだけである種のMemoizeパターンになる)

ので気に入っています。

P.63のShwartz変換も結構おもしろいです。

id:amachang

情報ありがとうございます。

||= はよく使うのですが、ソートとかで重い処理をする場合には意識的に使おうと思いました^^

2006/10/17 22:41:45
id:ZIGOROu No.4

回答回数31ベストアンサー獲得回数0

ポイント20pt

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

これちょっとずるいかなー?

id:amachang

ちょwwすごいなww てか、微妙にワンライナーじゃない気が・・・・。

2006/10/19 22:28:48
  • id:dropdb
    初質問おめでとうございまーす!
  • id:b-wind
    実用的なものはかけますが、芸は持ってないのでコメントで。
    http://www-06.ibm.com/jp/developerworks/linux/030523/j_l-p102.html
  • id:icchan0000
    結城浩さんのperlクイズ
    http://www.hyuki.com/pq/

    今休刊しているメルマガですが、面白かったですよ~
    書籍も出ているのでもしよろしければ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません