• ベストアンサー

スカラと配列の参照を引数で渡したい。

sub test{ my ($ref) = @_; print ref $ref; } my @a = (1, 2, "A"); #test(\"aaaa"); # SCALER #test(\['a', 1]); # REF #test(\@a); # REF # ARRAY test( \(1, 2) ); # スカラー? 引数を参照で渡すとメモリ効率?が良いと思い、スカラの場合は \"スカラー"で渡せましたが、 配列の場合は、直接 \('配列', 'です') は無理なのでしょうか? また、基本的に参照で渡すより、普通の型で渡した方がソースは読みやすいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

スカラー変数はもともと参照で渡されます。 @_[n]を書き換えることで呼び側を変更することができます。 配列は、@_にコピーされるために呼び側の値を変更することができません。 その場合は、\@arrayのように参照を渡すことで、呼び側を変更することができます。 大きい配列など参照で渡した方が良い場合があります。 [el1, el2 , …]は無名配列でもともと参照です。\を付ける必要は有りません。 (el1, el2 , …)は、リストであって、配列ではありません。 スカラー的に評価した場合には最後の要素になります。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

test(['配列', 'です'])で、配列でも渡すことができます。 ?('配列', 'です')は、'配列'と言うスカラのリファレンスと'てす'と言うスカラのリファレンスの二つを渡す場合の記述です。 > また、基本的に参照で渡すより、普通の型で渡した方がソースは読 > みやすいでしょうか? そんなことはありません。perlの場合オブジェクトがリファレンスで表されると言う事情もあり、配列、ハッシュのリファレンス渡しは多用されます。 ただし、ただのスカラに関しては、大きなデータではない限りはリファレンス渡しをしないことが多いです。

すると、全ての回答が全文表示されます。

関連するQ&A