<PerlExample>

与えられた数値の総和を出力するスクリプト

スクリプト名に続いていくつかの数値をスペースで区切って与えるとそれらの総和を表示する。
まずはコード。

samuraisummer.pl
#!/usr/bin/perl
$sum=0;
foreach (@ARGV){$sum+=$_;}
print "$sum\n";

1行目はおまじない。 #!に続いてperl本体のある場所を指定する。 どこにあるか判らない場合は、シェルから"whereis perl"と打つと出てくる。 結果のうち一番最初に出てきた奴にしておけば安泰だろう。

2行目では変数の宣言と初期化を行う。 perlは素の状態では変数の宣言を必要としないが、これがしばしばバグの素となる事は皆さんの広く知る所でしょう。
頭に"$"が付いているのはスカラー型、つまり普通の意味での変数。"@"が付いているのは配列型。"%"付きのもあるがここでは言及しない。 初期化しないとundef(未定義値)みたいななんだかよくわからん物が入っている恐れがあるので、これもしっかりやる。

3行目からはいよいよ本題である計算に入る。といっても実は3行目で終わってしまうのだが。
スクリプト名に続いて与えられた数値達は、@ARGVという配列にまとめて入っている。 @ARGVはコード内のどこにも宣言されていないが、これは特殊変数といってperlが最初から用意している変数の1つだからである。 さて、この@ARGVは配列変数なので、foreachという制御文が使える。 foreachとは、"for each element"の略とでも言えばいいのだろうか。そんな感じの動きをする。 具体的には、foreach $temp (@liss){〜〜〜;} と指定すると、@listの要素を1つずつ取り出して$tempに代入し、 {}内に書かれた処理を実行する。 コード本文では$tempにあたるものが書かれていないが、これは省略できるからである。 省略した場合には何が使われるのかというと、これまた特殊変数の1つで、perlの影の主役とも言える"$_"である。 perlでは関数の引数や出力先といったものを省略できることが多々あるが、その場合に使用されるのは$_とその配列版"@_"であることが殆どである。
3行目の話に戻ろう。

foreach (@ARGV){$sum+=$_;}
これは、@ARGVの要素を1つずつ取り出して$_に代入し、その$_を$sumに加える、という処理を行っている。 この作業を@ARGVの全ての要素について終えると、$sumには@ARGVの総和が収まっている、という寸法。

計算結果は出力しないと意味が無い、ということで4行目。
Cのprint文より随分と親切なPerlのprint文は、出力先を省略すると自動でSTDOUT,すなわち標準出力に向かって出力してくれる。

というわけで早速実行してみよう。
ソースはそのままではただのテキストファイルなので、実行可能にするためには実行権限を与える。それにはchmodコマンドを使う。

$ chmod 744 samuraisummer.pl
$ ./samuraisummer.pl 3114 1814 1347 1115 939 827 710 633 540 507
11546

答えが信じられない方は電卓なりなんなりでお確かめください。

accend->Perl->labnote->index page