カレッヂ |
質問者 マグ
投稿日 5/4(土) 09:35:20
よろしくお願いします。 関数内で引数を区別しようとテストしてみました。 ============================================= @List1 = (1,2,3); $Scalar = 4; @List2 = (5,6,7); &Test(@List1, $Scalar, @List2); sub Test { my (@dat1, $dat2, @dat3) = @_; print "@dat1 \n $dat2 \n @dat3 \n"; } 上の例ではすべての引数が @dat1 に入ってしまい どこまでが @List1 の値か区別できません。 引数を区別して受け取りたい場合どのようにするのでしょうか? 初歩的な質問と思いますがよろしくお願いします。 |
回答者 今夜はやすだ
[削除]
投稿日 5/4(土) 23:48:57
リストを引数に取る場合、どうしてもこんな問題が起こります。 私の場合、こんなとき、リファレンスを使います。少々ややこしくなりますがなれれば大丈夫なはずです。 &Test(\@List1,$Scalar,\@List2); sub Test{ my @dat1=@{shift()}; my $dat2=shift; my @dat3=@{shift()}; print "@dat1\n$dat2\n@dat3\n"; } |
質問者 マグ
[削除]
投稿日 5/5(日) 17:57:10
ご返答ありがとうございました。 レファレンス=ポインタのような感じですね。 早速、使ってみます。 ところで他にも調べましたら 型グロブで Test(*List1, *Scalar, *List2); sub Test { local (*dat1, *dat2, *dat3)= @_; print "@dat1 \n$dat2 \n@dat3 \n"; } でもOKでした。 なぜか my だとエラーになるのは?です。 レファレンスを使用した方がいいみたいです。 |
回答者 今夜はやすだ
[削除]
投稿日 5/5(日) 23:33:20
型グロブなら、次のようにして、渡せばいいのでは?関数内でのlocalが仕方ないでしょうが。 &Test(\@List1,\$Scalar,\@List2); |
返信(回答)する
Web裏技 |