1
上記のコードを実行すると、出力は2つになります。 Perlが通訳者であることを理解する限り、foo(mark1)が呼び出されると、最初に印刷されるべきではありません.foo()(mark2)が呼び出されると、2つが印刷される必要があります。しかし、なぜ2人が両方の時間に印刷されているのですか、どうか説明してください。Perl関数呼び出し
上記のコードを実行すると、出力は2つになります。 Perlが通訳者であることを理解する限り、foo(mark1)が呼び出されると、最初に印刷されるべきではありません.foo()(mark2)が呼び出されると、2つが印刷される必要があります。しかし、なぜ2人が両方の時間に印刷されているのですか、どうか説明してください。Perl関数呼び出し
Perlは、あなたが理解できるように解釈された言語ではないためです。 Perlコードは実行前にコンパイルされます。コンパイルのステップはありませんが、コンパイラはプログラムの実行を開始する前に、すべてのソースコードを解析してコンパイルします。
あなたのコード内use warnings
を含めていた場合は、その後、次の警告(最初の関数呼び出しから前出力)を見ているだろう:
サブルーチンfooがFUNCラインで再定義12
これは、何が起こっているかをかなり明確にします。
ああ、ところで - //
はPerlのコメントではありません。あなたは#
が欲しかったです。
コンパイルしていませんか? – Carcigenicate
'//'はPerlのコメントではありません。コメントを表すには '# 'を使わなければなりません。 – simbabque
定期的に 'use warnings'と' use strict'をすべてのPerl 5ファイルの先頭に必ず追加することをお勧めします。 –