基本文法

変数

スカラー変数は、変数名の左横に、$(ダラー)をつけます。
変数名には、英数字と、_(アンダーバー)が使用できます。
ただし、変数名の最初に数字を使うことは出来ません。
$var = 0;  # 宣言と初期化
$1var = 'none'; # ×
$"var! = 12; # ×

配列

スカラー変数とは違い、@(アットマーク)をつけます。
変数名は、スカラー変数と同じ。
沢山の変数の集まりのようなもので、添え字により、配列の中の数値を参照します。
添え字は、@を$にし、右横に、大かっこ("[]")の中に数字を入れます。
これをしていると、いろいろと応用することが出来ます。
@arr = ('a', 'b', 'c'); # 宣言と初期化
@1arr = (); # ×
$arr[0]; # 0番目(配列1番目)の要素
#   ↑これが添え字

連想配列

ハッシュと呼ばれたりします。
C言語を使ったことがある人は、構造体を思い出してくれればかまいません。
ただ、難しくて苦戦した人も中にはいるでしょう。
そんな人は、その構造体が簡単になったものだと思ってくれれば幸いです。
変数名その他は、スカラー変数や配列と同じ。
配列のような添え字は無いが、その代わり、キーを使う。
キーは、ブレス("{}")で囲む。
%hash = (
    key0 => value1,
    key1 => value2,
    key2 => value3, # 最後にカンマがついても[[エラー]]にならない
);
$hash{'key1'}; # value2が参照される。

制御構文

  • if,unless
英語の意味どおり、「もし~ならば」の意味。
unlessの場合は、その逆。
()の中に、条件式、{}の中に事柄。
unlessも同様だが、普通はunless文は使わず、感嘆符を前に付け、結果の真偽を反転させるほうが多い。もしくは、結果が逆になるように条件式を書くなど。
elsifというものがあり、どんどんつなげて書いていける。
以上のどれにも当てはまらない場合、その他、それ以外ということで、
else節を最後につけると、if,unless,elsifの全ての条件に当てはまらなかった場合の処理を行うことが出来る。

  • for
回数の決まった繰り返しを得意とする、ループ構文。
for(初期化; この条件の間; ループ毎の処理) {
    ・・・事柄
}
この様に書く。
初期化には、普通は、$i = 0;や、$i = 1;と書かれる。
この条件の間というのは、条件が真である場合、ループするということ。
ループ毎の処理は、ループが終わり、次のループに移るときに処理されるもの。
対外、$i ++や、$i --と書かれる。最後にセミコロン(";")はいらない。

  • while,until
回数の決まっていない繰り返しを得意とする、ループ構文。
forと決定的に違うのは、初期化やループ毎の処理が無く、条件しかないこと。
このループも、()の中の条件が真の間ループし続ける。
untilは、()内が、偽の間。

  • foreach
配列毎のループを行う。
特に条件式は無いが、配列の数だけループさせることが出来る。
恐らく、Perl独自。
構文と()の間に変数名を指定でき、ループの最初に、その変数名に配列の中身(0から順に)が格納される。

サブルーチン

ユーザー関数とも。
要は、関数を自作できます。
subキーワードに、スペースを挟んで関数名(予約語とかぶらないように)を指定し、
ブレスの中に実行する内容を書く。
大体、サブルーチンの最後は、returnで値を返すことになる。
sub my_subroutine {
    ・・・実行内容
}
尚、C言語の関数風にMySubroutineや、Javaの関数風な、mySubroutineは、命名規則的には誤りであり、原則として関数名を区切る場合は、アンダーバー("_")を利用する。

パッケージ

パッケージを省略すると、自動的にmainパッケージになります。
この、パッケージというのは、指定するとmainパッケージとは別の空間に関数や変数を格納します。
名前空間が違うので、同じ変数名や、同じ関数名でも、かまいません(相変わらず予約語は指定できませんが)。
尚、パッケージは宣言すると、ファイルの終わりまたは、次のパッケージ宣言までそのパッケージ名に、名前空間が移ります。
パッケージを指定した場合は、
そのパッケージ名::変数(関数)名
という風に指定しなければなりません。
package A;
our $var = 'A';

package B;
our $var = 'B';

package main;
print $A::var; # パッケージAの$var変数
print $B::var; # パッケージBの$var変数
#-- 実行結果 --
AB

となります。
パッケージ名は、Javaでいうクラス名、Cでいう関数名風に、頭文字を大文字にします。
最終更新:2007年07月05日 17:12