perlでArrayのリファレンスを得ようとしてハマったのでメモ。
[$a, $b, $c] と \($a, $b, $c) は別物。@x = ($a, $b, $c); \@x と \($a, $b, $c)も同様。
前者はArrayのリファレンスですが、後者は \$a, \$b, \$cを要素とするArrayになる。
perl -le 'print [1,3,4];' #=> ARRAY(0x800d80) perl -le 'print \(1,3,4);' #=> SCALAR(0x800d80)SCALAR(0x800f00)SCALAR(0x801890)
上のように直接 [] を書けるような場合は良いのだけど、splitのように関数の結果としてArrayが帰ってくる場合、そのArrayのリファレンスを得るためには一度変数に代入しないといけない?
perl -le 'print \split "-", "1-2"' #=> SCALAR(0x800d80)SCALAR(0x800e94) perl -le 'my @a = split "-", "1-2"; print \@a' #=> ARRAY(0x8018cc)
()で括ったりしてもだめぽ。
なんか一時的に名前を用意するのがやな感じですが、何かもっといい方法があるのでしょうか?
追記:
はてブコメントで指摘頂いたとおり、[]で括れば良かったようです。そうか…分かれば簡単なことなのに…。
perl -le 'print [(1,2,3)]' #=> ARRAY(0x800ef4) perl -le 'print [split "-", "1-2"]' #=> ARRAY(0x800ef4)
勉強になりました、ありがとうございます。m(_ _)m