- ベストアンサー
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'));
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
結論から言うと、アレイやハッシュはリファレンスで返すほうが良いと思います。 スカラはなんともいえませんがね。 > 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)
Cと同様に、返そうとする配列やハッシュへのリファレンスを返すべきです。 returnの引数はリストです。リストに配列を渡した場合はそのまま解釈されますが、 ハッシュを渡した場合はkey, val, key, valと並んだ配列に「潰して」渡されます。 さらに悪いことに、ハッシュ中のキーの並び方はめちゃくちゃになっており予想できません。 従って、配列とハッシュを混ぜて返したりすると滅茶苦茶になります。