#99 Article 983 Posted at 1995/12/05 23:53:34 by Mick'n (MAP1406) [SAHOU.1]
Subject: Re:*8 プログラミングお作法の話 /982 .... /941 /940
頼まれていないのに解説します。まず、perl での変数は $ ではじまります。
$a とか $b などですね。$_ とか $' など、記号が続くものは特殊な意味をもって
ますが、以下の例では $_ のみが使われてます。
1 行目:
($#ARGV>=0)||die "you must specify argument.\n";
$#ARGV>=0 は引数の数を check してます。C で同様のことを記述してみる
ならば、
if (!(argc >= 1)) {
printf("you must specify argument.\n");
exit(1);
}
というところでしょうか。die というのはメッセージを表示してプログラムを
終了させるステートメントです。|| は OR 演算子ですが、
expression || statement
で、expression が成立しなければ、statement を実行する、という風に使う
ことがよくあります。C などでの || の評価の仕方を理解していればわかる
と思います。
2 行目:
grep(printf("%s\n",($_==3||$_==5||$_==$ARGV[0])?"にゃん"x$_:$_),
(1 ... $ARGV[0]));
これを分解してみるならば、
2-1: grep(
2-2: printf("%s\n",
2-3: ($_==3 || $_==5 || $_ == $ARGV[0])
2-4: ? "にゃん" x $_
2-5: : $_),
2-6: (1 ... $ARGV[0])
2-7: );
となりましょうか。まず、2-6 行目から解説しますと、
(1 ... $ARGV[0])
で、1 からはじまり、$ARGV[0] で終るリストを作ります。$ARGV[0] は一番目の
引数を表します。$ARGV[0] が 5 ならば、この行は (1, 2, 3, 4, 5) としたこと
に同じです。
で、grep というのは、grep(EXPRESSION, LIST) という構文で、
LIST の各構成要素を $_ に代入した上で、EXPRESSION を評価し、
それが真であれば、それを取り出し、リストを返す
というものです。
$ARGV[0] が 5 ならば、LIST は (1, 2, 3, 4, 5) になりますから、
$_ に 1 を代入し、2-2 ~ 2-5 行を実行
$_ に 2 を代入し、2-2 ~ 2-5 行を実行
:
$_ に 5 を代入し、2-2 ~ 2-5 行を実行
というように実行されます。2-2 から 2-5 行は、3 項演算子と printf の
組合せで、C を使った経験のある方ならわかると思います。
で、これですべてです。
Mick'n (MAP1406)