配列へのアクセス
- $hoge[0] = "hoge";
- $hoge[n]と$hogeは別の名前空間に置かれる
- 添字が配列の末尾より後ろを指した場合はundef
- 配列の末尾より後ろに値をセットした場合、飛ばした中間の要素にはundefがセットされる
- 最後の要素にアクセスするためには負数を使う
- $hoge[-1]
- これで末尾の一つ手前を取得できるけどあまりやりたくない($hoge[-2])
- (1, 2, 3)
- ("hoge", 4.5)
- ()
- (1..100)
qwショートカット
- qw(hoge fuga piyo)
- 文字列のリストが作成できる
- 各要素はシングルクォートで囲まれている扱いなので注意(\nとか)
- 要素間の空白文字は捨てられるので、改行とか入れつつ読みやすくできる
- qw後の()は別になんでもいい
- 要素内にこのデリミタを入れたい場合はエスケープする
- qw( hoge\) fuga piyo )
- qw! hoge\! fuga piyo !
リスト代入
- リスト値を変数に代入
- ($hoge, $fuga, $piyo) = ("hoge", "fuga", piyo);
- 変数の数が余分にあればundefが代入され、リスト値が多ければ捨てられる
- 関数の引数受け取りとか便利
- my ($hoge, $fuga, $piyo) = @_;
- 変数の値交換も便利
配列全体を表す@
- @hoges = qw/ hoge hoge hoge /;
- @words = (@hoges, fuga, piyo); #hogesは展開される
- @empty = (); #@emptyをさらにリストに入れても無いのと同じ(undefが入ったりはしない)
- @hoges = qw/ hoge undef hoge /; #明示的にundefを入れる
配列の先頭or末尾の要素を操作
- 末尾の要素を取り除く
- 末尾に要素を追加
- 先頭の要素を取り除く
- 先頭に要素を追加
配列を文字列に展開
- スカラー変数と同じくダブルクォーテーション内で展開できる
- 文字列として@arrayを入れたい
foreach
foreach $word (qw/ hoge fuga piyo /) {
print "$word\n";
}
foreach (qw/ hoge fuga piyo /) {
print "$_\n";
}
@words = qw/ hoge fuga piyo /;
foreach (@words) {
$_ .= "\n";
}
並び替え
print reverse(1..10)."\n";
@words = sort(qw/hoge fuga piyo/);
print "@words\n";
スカラーコンテキストとリストコンテキスト
- 式が置かれている位置によって意味が変わる
- コンテキスト == 式が置かれている場所を示す概念
- Perlが式を解析する場合はスカラー値かリスト値のどちらかを期待する
- コンテキストによって評価が変わる例
$n = @array;
3 + @array;
reverse($hoge);
- スカラーコンテキストを強制するscalar関数
- リストコンテキスト強制関数は無い、必要ないとのこと
@array = qw/ a b c /;
print "string :", @array, "\n";
print "number :", scalar @array, "\n";
リストコンテキストで
$line = <STDIN>;
@lines = <STDIN>;
chomp(@lines = <STDIN>);