プロが教えるわが家の防犯対策術!

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'));

A 回答 (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();
は、それなりに配慮すべきです。
    • good
    • 0

Cと同様に、返そうとする配列やハッシュへのリファレンスを返すべきです。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!