リテラル
整数リテラル
整数リテラルは以下のようなもので、_にて読みやすくすることもできる(桁区切り)。
0 2001 -20 30_289
また、0で始まるものは8進数、0xで始まるものは16進数、0bで始まるものは2進数として扱われる。
文字列リテラル
文字列は、使用可能なメモリ分の長さを扱える。
文字列リテラルは、シングルクオート文字列リテラルと、ダブルクオート文字列リテラルがある。
シングルクオート文字列リテラルは、'fred'のようなもので、この中では、逆スラッシュかシングルクオートのみがエスケープ処理可能。
ダブルクオート文字列リテラルでは、制御文字等を逆スラッシュエスケープが可能で、変数展開が行われる。
文字列値は、「.」演算子により連結ができる。
"hello" . "world" # "helloworld"と同じ
また、文字列繰り返し演算子により、繰り返しを表現できる。
"hello " x 3 # "hello hello hello"と同じ "hello" x (2+1) # 上と同じ 4 x 3 # "444"
数値と文字列間の変換は、Perlにより自動的に行われる。
変数型
Perl には以下の5種の変数型が用意されており、プレフィックスとしてファニー文字を付けて表現する。
型 | 文字 | 例 | 説明 |
---|---|---|---|
スカラー | $ | $cents | 個々の値(数値または文字列) |
配列 | @ | @large | 値のリスト(数値でキーを指定) |
ハッシュ | % | %interest | 値のグループ(文字列でキーを指定) |
サブルーチン | & | &how | 呼び出し可能なPerlコードのかたまり |
型グロブ | * | *struck | struckという名前を持つもの全て |
スカラーデータ
スカラーは Perl が扱う最も単純なデータで、数値や文字列が該当する。
数値は Perl 内部では、整数でも浮動小数でも倍精度浮動小数により計算を行う。
$a = 123; $b = abc;
配列
リストはスカラーを並べた集合で、配列はリストを保持する変数。
リスト値の代入
@home = ("couch", "chair", "table", "stove");
要素への代入
$home[0] = "couch"; $home[1] = "chair"; $home[2] = "table"; $home[3] = "stove";
リスト値への代入
($potato, $lift, $tennis, $pipe) = @home;
変数の入れ替え
($alpha, $omega) = ($omega, $alpha);
要素の最後のインデックス
$end = $#rocks;
ハッシュ
ハッシュの代入1
%longday = ("Sun","Sunday","Mon","Monday", "Tue","Tuesday","Wed","Wednesday","Thu","Thursday", "Fri","Friday","Sat","Saturday");
ハッシュの代入2
%longday = ( "Sun" => "Sunday", "Mon" => "Monday", "Tue" => "Tuesday", "Wed" => "Wednesday", "Thu" => "Thursday", "Fri" => "Friday", "Sat" => "Saturday");
ハッシュの値取得
%longday{"Wed"}
サブルーチン
サブルーチンは、プログラムテキストのどこに置いても構わない。
#! /usr/bin/perl &marine; &marine; sub marine { $n += 1; print "Hello, sailor number $n!\n" }
出力
Hello, sailor number 1! Hello, sailor number 2!
戻り値
サブルーチンの中で最後に評価された結果が自動的に戻り値となる。
次の例は、$fredと$barneyのうち、大きい方の値を返却する。
sub larger_of_fred_or_barney { if ($fred > $barney) { $fred; } else { $barney; } }
また、return $fred;等により、即座に値を返却することもできる。
引数
サブルーチン呼び出しにて、引数は自動的に配列変数@_に代入される。
配列変数@_の内容を、$_[0]等で参照可能。また配列変数はサブルーチンローカルな変数となる。
&max(2, 3); sub max { my($a, $b) = @_; if ($a > $b) { $a } else { $b ) }
可変長引数
以下の例は、可変長の引数から最大値を得るサブルーチン。
$maximum = &max(3, 5, 10,2); sub max { my($max_so_far) = shift @_; foreach (@_) { if ($_ > $max_so_far) { $max_so_far = $_; } } }
ブール値の扱い
Perlでは独立したブール型はなく、真(true)と偽(false)の判断は以下の規則が使われる。
- 特別な値undefは偽
- 数値の0は偽。それ以外のすべての数値は真
- 空文字は偽。通常それ以外は真(文字列のゼロは数値のゼロと同じため、偽となる)