• ベストアンサー

Perlは戻り値で、ハッシュや配列を正しく返さないのでしょうか?

Perlは戻り値で、ハッシュや配列を正しく返さないのでしょうか? 返せるように見えて実際は、歯抜けのデータなど、不安定で使い物になりません。 よって、リファレンスでスカラー値で利用するのが正論でしょうか? $a = ''; %b = (); @c = (); ○ return ($a, \$b, \$c); × retuen ($a, %b, @c); ○ my ($a, $b, $c) = aru_kansuu($hikkey, ('komori')); × my ($a, %b, @c) = aru_kansuu($hikkey, ('komori'));

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

  • ベストアンサー
  • estea
  • ベストアンサー率44% (39/87)
回答No.1

結論から言うと、アレイやハッシュはリファレンスで返すほうが良いと思います。 スカラはなんともいえませんがね。 > my ($a, %b, @c) = aru_kansuu($hikkey, ('komori')); が、ダメな理由ですが、perl は アレイ列とハッシュ列、@a と %a は微妙に関係にあります。データの扱い的に無関係ではないんですわぁ。 perl のバージョンによってはかなり"濃密"(笑) な 関係にありますです。 my( $a , @a ) = &hogege(); my( $a , %a ) = &hogege(); は、問題ないですが my( @a , %a ) = &hogege(); は、それなりに配慮すべきです。

その他の回答 (1)

noname#5910
noname#5910
回答No.2

Cと同様に、返そうとする配列やハッシュへのリファレンスを返すべきです。 returnの引数はリストです。リストに配列を渡した場合はそのまま解釈されますが、 ハッシュを渡した場合はkey, val, key, valと並んだ配列に「潰して」渡されます。 さらに悪いことに、ハッシュ中のキーの並び方はめちゃくちゃになっており予想できません。 従って、配列とハッシュを混ぜて返したりすると滅茶苦茶になります。

関連するQ&A