※ ChatGPTを利用し、要約された質問です(原文:入れ子関数の引数について)
入れ子関数の引数について
このQ&Aのポイント
引数を与えられた関数の中で、更に別の関数を呼び出した場合の動作について、勘違いしていたのか、理解できない動作をしたので、その理由について教えていただきたく、投稿しました。
関数を呼び出す時に()を付けなかったら引数がないものとして扱われると思っていたが、どうやら()を付けなければ、引数が引き継がれているようなのです。
なぜこのようなことが起こるのでしょう?特定の条件下ではなく、常にこのような動作をするものなのでしょうか?
引数を与えられた関数の中で、更に別の関数を呼び出した場合の動作について、
勘違いしていたのか、理解できない動作をしたので、
その理由について教えていただきたく、投稿しました。
下記のようなテストを行いました。
----------
&TEST1("test1");
sub TEST1{
my($test) = @_;
print "$test\n";
&TEST2;
&TEST2();
&TEST2("test2");
}
sub TEST2{
my($test) = @_;
$test = !$test?"noooooooo!":$test;
print "$test\n";
}
----------
すると、下記のような結果が出ました。
----------
test1
test1
noooooooo!
test2
----------
これまで、関数を呼び出す時に()を付けなかったら
引数がないものとして扱われる物と思っていたのですが、
どうやら()を付けなければ、引数が引き継がれているようなのです。
(私が知らなかっただけで、当たり前のことと思うのですが・・・。)
なぜこのようなことが起こるのでしょう?
特定の条件下ではなく、常にこのような動作をするものなのでしょうか?
回答しずらい質問ですが、よろしくお願いします。
お礼
ご回答ありがとうございます! 私も検索したりして調べてみたのですが、どうもそれらしいマニュアルが見つからなくて困っていました。 参考URLとても為になりました。 あれから色々テストしてみたのですが、色々やっているうちに、 このことを忘れなければ(知っていれば)便利な仕様だと思うようになりました(^ ^; とりあえず、気付くことができて良かったです。。。 ありがとうございました。