第 9 章 数式処理 / 数値計算ソフトウエア
12.4 Perl
12.4.2 Perl の基本的な文法
本節では, 以下の議論の準備として, Perlの基本的な文法について簡単に解説しておきます.
構文
Perlのプログラムを書く場合は, ふつうはプログラムの最初の部分に
#!/usr/bin/perl (12.31)
12.4. Perl 179 という文字列を書きます. これは Perlを実行するためのおまじないだと思って下さい.
2行目以降が, 実際のプログラムになります. 各行に書かれる内容は, 変数(データを入れておくための 置き場所)および変数への数値の代入,各種演算子,( )などの区切り記号,予約語と呼ばれる特別の意味を 持ったキーワードなどです. Perlのプログラムでは,特別な場合を除き,空白文字(スペースや空行など)が たくさん並んでいても,それらはすべて空白文字が1個しかない場合と同一に取り扱われます.
2行目以降で,中括弧{}以外の各行の最後にはセミコロン(;)が入ります. 一方,中括弧{}で終わる行の 行末にはセミコロンは入りません.
中括弧{}で囲まれた領域は, 「ブロック」と呼ばれるプログラム中の単位を作ります. 以下で述べるif 文, while文およびfor文を使うときには,必ずブロックを作らなければなりません.
2行目以降で文字#に続く部分は注釈とみなされます. 注釈は人間にとってプログラムが読みやすくなる ように入れるものであり,プログラムの実行結果には関係しません.
Perlのプログラムは, 後で述べる制御構造が指定されていなければ, 上から下に順番に実行されていき ます.
変数の種類: スカラー変数, 配列変数, ハッシュ変数
データを入れておくための置き場所のことを変数と言います. Perlが取り扱うことができる変数は,スカ ラー変数,配列変数およびハッシュ変数の3種類に分類されます.
スカラー変数とは,数値や文字列を保存するためのデータの置き場所です.
配列変数とはスカラー変数をいくつか並べたものです. 配列の個々の要素には, 0から始まる番号(添字) が付きます.
ハッシュ変数とは, 2個のスカラーを対にしてまとめたものです.
配列とハッシュはよく似ているのですが. 配列では添字(各要素を指し示す番号あるいは記号)が0から 始まる整数に固定されているのに対して,ハッシュでは添字として任意の文字列を使うことができる,とい う点が異なります. ハッシュの「添字」として使われる文字列のことを「キー」と呼びます.
図12.8を見ると配列とハッシュの違いのイメージがわくかもしれません. 要するに,配列とは番号が付い たロッカーのようなもので,ハッシュとは個々の置き場所に番号のかわりに何か名前が書いてあるロッカー のようなものです.
配列
ハッシュ
0 1 2 3 4
Blue Green Red White Cyan
配列の個々の要素には番号がつく
ハッシュの個々の要素には名前がつく
図 12.8: 配列とハッシュの違い
変数には好きな名前を付けることができるのですが,いくつか制限があります.
まず最初に, Perlは変数名の前に特別な記号を付けることでスカラー変数と配列変数,ハッシュ変数を区 別します. この区別の仕方は,
• スカラー変数の名前の第1文字は記号$
• 配列変数の名前の第1文字は記号@
• ハッシュ変数の名前の第1文字は記号%
というものです.
変数の名前として使える文字は,英文字の大文字と小文字,アンダースコア(記号「_」)です. ただし,記
号$,@あるいは%に続く最初の1文字は英文字である必要があります. 変数名の文字数は255文字までです.
また,いくつか予約語が定義されていて,予約語と同じ名前は使えません.
スカラー変数,配列変数およびハッシュ変数の3種類に同じ名前を使うこともできます. たとえば,$a,@a,
%aという3種類の変数を使った場合, Perlはこれらを別の変数であるとみなします. ですから,異なる種類 の変数に同じ名前を使っても, Perlが混乱することはありません.
なお,配列やハッシュのように,スカラーがいくつか並んだ構造のことを,リストと呼びます.
変数への値の代入や参照
スカラー変数に数値を代入するときには,
$a=10; (12.32)
などといった書き方をします. 一方,スカラー変数に数値を代入するときには,
$a="Hello"; (12.33)
などのように,代入したい文字列を2重引用符「"」で囲います.
配列変数に数値を代入するときには,
@b=(1,2,3,4); (12.34)
というように,要素の並び全体を( )で囲い,個々の要素をコンマで区切って並べます. 一方,配列変数に文 字列を代入するときには,
@b=("One","Two","Three","Four"); (12.35) のように,各要素を2重引用符で囲います.
配列の中で特定の添字を持った箇所に数値を参照したり,そこに数値を代入したりする場合には注意が必 要です. 配列の特定の番号の要素を参照するには,
$b[1]; (12.36)
などのように,配列名に続いて角かっこ[ ]を書き,かっこの中に添字を指定するのですが,これ以外に 配列名の先頭の文字「@」が文字「$」に変わる (12.37) という規則があります. これはなぜかというと,配列とはスカラー変数が並んだものなので,配列の特定の 添字を持った部分はスカラー変数になるからです. ですから, (12.4.2)の配列@bの第1要素(前から2番目,
”Two”となっている部分)の値を文字列Zweiに変更したいときには,
$b[1]="Zwei"; (12.38)
といったような書き方をします.
ハッシュに値を代入するときには,
%c=("さとう","白","きゅうり", "緑","トマト","赤"); (12.39)
12.4. Perl 181 などのようにします. 代入のしかたは配列と同じですが,ハッシュは必ず「一般化された添字」(「キー」と 呼びます)と対応する値のペアから構成されなければならないので, (12.4.2)において要素の数は偶数個で なければなりません.
これとは別に,ハッシュの特定のキーを持った要素に値を代入するには,
$ハッシュ名{"キー"}=値; (12.40)
という書き方をします. この場合も,ハッシュ名の最初の文字「%」が文字「$」に変わります. さらに,ハッ シュ名に続いて中括弧{ }の中にキーを(ふつうは2重引用符で囲って)指定し, 等号の右側に値を書きま す. 値が文字列なら2重引用符で囲う必要がありますが,数値の場合には2重引用符は付けません. たとえ ば, (12.4.2)のハッシュにおいてキー「さとう」に対応する値を「白い」から「甘い」に変更するには,
$c{"さとう"}="甘い"; (12.41)
のようにします.
ハッシュの要素を参照する方法は配列の場合と同様です. たとえば, (12.4.2)の例でこのハッシュの2番 目に宣言されているキー「きゅうり」に対応する値を参照するには,
print $c{"きゅうり"}; (12.42)
などのようにします. 最初の文字が「%」から「$」にことは配列の場合と同様です.
Perlでは,変数を使う前にあらかじめ宣言しておく必要はありません. どのような変数も,それが始めて 利用された瞬間に誕生します. 新たに誕生した変数は, そこに値が代入されない限り, undefと呼ばれる値 を持ちます. undefは,数値に直すと0と同じと解釈されます.
演算子
スカラーなどに対して, 4則演算,文字列の比較などの各種の演算子が用意されています. これらを表12.3 にまとめておきます. これらの演算子には優先順位(いくつかの演算子と被演算子が並んでいるときに,ど の演算を先に実行するかという規則)が定められています. この優先順位は,小学校の算数で学ぶ優先順位
(「掛算を足し算より先にする」など)と類似しています. この優先順位は式全体を( )で囲うことで変更
できます. たとえば,
(1-2)-3; (12.43)
と書くと左側の減算が先に実行されるので結果は-4になるのに対し,
1-(2-3); (12.44)
と書くと右側の減算が先に実行されるので結果は2になります.
表12.3: Perlの演算子
(a)数値演算 (b)数値や文字の比較 (c)その他 記号 意味
+ 加算
- 減算
* 乗算
/ 除算
% 剰余
** べき
記号(数値) 記号(文字列) 意味
< lt <
<= le ≤
> gt >
>= ge ≥
== eq 等しい
!= ne 等しくない
記号 意味
. 文字列を結合
& ビットAND
| ビットOR
^ ビットXOR
&& AND
|| OR