• ベストアンサー

Perl 戻り値の型の判定って出来ますか?

Perlは引数でのOUTを返せないと認識してます。 ※ここで間違っていたらご指摘下さい。 そのために下記のように、違った型(スカラー変数または配列)を返すように切り替えた場合に呼び側はどのように判定すれば良いのでしょうか?教えて下さい。 $result = sample(); sub sample{ $abc = "abc"; @xyz = qw(x y z); if(){ return $abc; } if(){ return @xyz; } return 0; }

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

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

1つの方法としては、 return \$abc; return \@xyz; としてリファレンスを返すことです。 そうすれば、 if(ref($result) eq 'ARRAY'){ print @$result; } else { #SCALAR print $$result; } のように判定できます。

t-hiyori
質問者

お礼

ありがとうございました。 解決いたしました。 また何かありましたら、よろしくお願い致します。

その他の回答 (1)

  • kapura
  • ベストアンサー率50% (48/95)
回答No.1

呼び側で push(@result, sample()) などとするのは安易でしょうか。 @resultの要素数を見ればスカラーが返されたのか簡易判定できるのでは?

t-hiyori
質問者

補足

さっそくの返答ありがとうございます。 しかし、1つの配列要素を返した場合とスカラーの場合との判定が出来ないような気がします。 Perlはビギナーでして普通がわからないのですが、 正常・異常の復帰値と配列データを返す場合同時に返したい場合はどうしているのでしょうか? やはりグローバル変数を使うのでしょうか?

関連するQ&A