初めてのPerl 第6版メモ。5版を(中途半端に)読んだの大分昔だけど思ったより覚えてる。
- リスト(list):スカラーの集合に順序を付けて並べたもの。
- 配列(array):リストを格納する変数。
- 配列のindexは0オリジン。
3.1 配列の要素にアクセスする
- $hoge[0]
- ここで$hogeというスカラー変数があっても全く問題ない。
- 添字は切り捨てにより丸められる。
- 末尾より後ろの要素を指すとundefになる。
3.2 配列の特殊なインデクス
- 末尾より後ろの要素に値を入れると自動的に拡張される。
- 最後の要素のインデクスは$#hoge
- 負のインデクスは末尾から先頭へ数える。-1で最後の要素。要素数を超える範囲を負のインデクスで指定するとエラー。
- ("括弧で", "くくって", "コンマで", "区切る")
- 範囲演算子:(1..3)→(1, 2, 3)。小数は切り捨て後に評価。増加のみ。
- 要素が式の場合、リテラルが使われる度に評価される。
3.3.1 qwショートカット
- qw( 単語の リストを 作る場合に クォートが 不要 )
- デリミタは任意の文字記号や括弧っぽいもの((), {}, [], <>)が使える。
3.4 リスト代入
- ($hoge, $huga) = qw(リストへ まとめて代入できる)
- 右辺リストは先に評価される。
- 右辺が多すぎる場合は切り捨て、少なすぎる場合はundefで穴埋め。
- 「配列全て」は@マークをつけて表す。(@rray)
- 配列を配列の要素にすると要素になった配列は展開される。
- undefを値として持つ変数はundefの要素にはならず単に無視される。undefはundef演算子で明示的に入れることができる。
- pop:配列の最後の要素を取り除き、値としてそれを返す。配列が空の時はundefが返る。
- push:配列の末尾に要素または配列を追加する。
3.5.1 shift演算子とunshitf演算子
- shift:配列の先頭の要素を取り除き、値としてそれを返す。配列が空の時はundefが返る。
- unshift:配列の先頭に要素または配列を追加する。
3.6 splice演算子
- 指定の範囲を取り除き、取り除いた範囲を返す
- 添字3以降の要素全て:splice @array, 3;
- 添字3から2つの範囲:splice @array, 3, 2;
- 取り除いた後を指定の要素で置き換え:splice @array, 3, 2, 1..3;
- 置き換えリストの長さは一致してなくてもよい。
- 範囲として0を指定すると指定位置に挿入する。
3.7 配列を文字列の中に展開する
- 要素はスペースで区切って展開される。
- Emailアドレスを記述した場合は注意!
3.8 foreach制御構造
foreach $hoge (@fuga){
print $hoge;
}
- 制御変数の値はループの度に変わる。
- 制御変数はリストの要素そのものであり、制御変数への変更はリスト要素への変更である。
- ループが終わると制御変数の値はループ開始前の値に戻る。
3.8.1 Perlお気に入りのデフォルト:$_
- 制御変数を省略すると制御変数として$_が採用される。
- その他の多くの場面でも変数を省略すると$_が使われる。(e.g. print;)
3.8.2 reverse演算子
- 逆順にしたリストを返す。リストそのものは変更しない。
3.8.3 sort演算子
- リストを文字としてソートする。リストそのものは変更しない。
- 順序はコードポイントに従う。
3.8.4 each演算子
- Perl 5.12以降
- eachを配列に適用する度に次の要素のインデクスと要素を返す。
3.9 スカラーコンテキストとリストコンテキスト
- Perlでは式は常にコンテキストに応じた値を返す。
- @list = @people # @peopleというリストが代入される
- $n = @people # @peopleというリストの要素数が代入される
3.9.1 リストを生成する式をスカラーコンテキストで使う
- 式により異なる。
- sort:undef
- reverse:逆転した文字列
3.9.2 スカラーを生成する式をリストコンテキストで使う
- リスト値を持たない式であれば、1要素のリストになる。
3.10 リストコンテキストでを使う
- 残りすべての行を読み込み、各行を要素として持つリストを返す。
- キーボードからの入力の場合、Unixの類はCtrl+dをファイルの終わりとみなす。WindowsではCtrl+Z。
- chompは配列に対しても作用し、各要素から最後の改行を取り除く。