初めてのPerl 第6版メモ。割と練習問題躓く。
4.3 戻り値
- サブルーチンの中で最後に評価された計算の結果は自動的に戻り値になる。
- 計算の結果が返り値として使われず捨てられる場合、無効コンテキスト(void context)警告メッセージが出る。
4.4 引数
&hoge(fuga, piyo);
- 引数はリストとして渡され、@_に格納される。
- サブルーチン内部の@_はプライベートなものである。
- 余ったパラメータは単に無視される。
4.5 サブルーチン内でプライベートな変数
- my演算子はレキシカル変数(lexical variable)を作り出す。
- レキシカル変数はそれを取り囲むブロックにスコープを持つ。
4.7 レキシカル変数(my変数)についての注意事項
- レキシカル変数はあらゆるブロックの中で使える。
- レキシカル変数の名前のスコープはそれを取り囲むもっとも小さいブロックまたはファイルに限定される。
- my演算子は代入のコンテキストを変えない。
- 括弧を伴わないmy演算子はレキシカル変数を1個しか宣言できない。括弧があれば複数同時に宣言できる。
- 新しい変数はundefまたは空リストとなる。
- 制御変数をレキシカル変数にすることもできる。
foreach my $hoge { ... }
4.8 use strictプラグマ
4.10 スカラー以外の返り値
- リストコンテキストで呼び出したサブルーチンは値のリストを返すこともできる。
- 引数なしのreturnはスカラーコンテキストではundef、リストコンテキストでは空リストを返す。
4.11 永続的なプライベート変数
- stateで宣言した変数はサブルーチンをスコープに持ち、さらに値を保持し続ける。
sub hoge { state $fuga = 0; ... }
- stateによる宣言文は2回目以降の呼び出しでは無視される。
- 配列とハッシュをリストコンテキストで初期化することはできない(少なくともPerl 5.14の時点では)。