dT*blog

design and programming

配列の引数渡し

納得いかねえ。

いま久しぶりに 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手法でちゃんとリファレンス使うようなことしろって話ですか。んー、力量不足だ。

Posted by dT by 06:26

トラックバック

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt/mt-tb.cgi/227

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31