痔になりやすい生活習慣とは?

引数を与えられた関数の中で、更に別の関数を呼び出した場合の動作について、
勘違いしていたのか、理解できない動作をしたので、
その理由について教えていただきたく、投稿しました。

下記のようなテストを行いました。
----------
&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
----------

これまで、関数を呼び出す時に()を付けなかったら
引数がないものとして扱われる物と思っていたのですが、
どうやら()を付けなければ、引数が引き継がれているようなのです。
(私が知らなかっただけで、当たり前のことと思うのですが・・・。)
なぜこのようなことが起こるのでしょう?
特定の条件下ではなく、常にこのような動作をするものなのでしょうか?
回答しずらい質問ですが、よろしくお願いします。

A 回答 (1件)

私も知らなかったんですが^^;)、マニュアルには書かれているようですね。


http://www.namazu.org/~tsuchiya/perl/info/perl-j …

&NAME # その時点の @_ をサブルーティンに渡す。

だそうです。

参考URL:http://www.namazu.org/~tsuchiya/perl/info/perl-j …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
私も検索したりして調べてみたのですが、どうもそれらしいマニュアルが見つからなくて困っていました。
参考URLとても為になりました。

あれから色々テストしてみたのですが、色々やっているうちに、
このことを忘れなければ(知っていれば)便利な仕様だと思うようになりました(^ ^;
とりあえず、気付くことができて良かったです。。。
ありがとうございました。

お礼日時:2003/11/07 15:04

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


人気Q&Aランキング