納得いかねえ。
いま久しぶりに perl を書いていまして。で、サブルーチンの引数にスカラ変数と配列を渡したら、何か微妙な動作するわけですよ。配列のN番目がおかしい。
$hoge = "xxx"; @arr = qw(abc ABC 123); sub func { local ( @a, $b ) = @_; print($#a); # $#a は配列の最後の添え字の参照 } &func(@arr, $hoge);
気持ちとしてはね、「2」になって欲しかったわけ。でも、現実は「3」とか言っちゃって、手厳しい。アレか、俺が田舎者だからってバカにしてんのか。それともアレか、俺が毛沢東を「マオツォートン」って呼ぶからか。ううう。
動きとしては、$b に入って欲しい値まで @a に吸収されてるってことだよね。そりゃ分かるけどさ、なんか優しくないじゃないか。お前みたいなヤツにはな、typeglob型使ってやるかんな!
$hoge = "xxx"; @arr = qw(abc ABC 123); sub func { local ( *a, *b ) = @_; print($#a); # $#a は配列の要素数の参照 } &func(*arr, *hoge);
というわけで、typeglob型(構造体みたいなやつ)を使って一件落着。しかし納得いかない。perl は何でもできて面白いんだけど、こういう挙動の怪しいとこが、ちょっとクセありすぎて困る。まあ、そんなこと言ってるなら typeglob になんか逃げないで、OOP手法でちゃんとリファレンス使うようなことしろって話ですか。んー、力量不足だ。
このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/227