Вызов функции Perl
$\ = "\n";
sub foo
{
print("one");
}
foo(); // mark1
sub foo
{
print("two");
}
foo(); //mark2
При выполнении приведенного выше кода ваш вывод будет: два, два. Насколько я понимаю, Perl является интерпретатором, поэтому, когда вызывается foo(mark1), нельзя ли сначала печатать один, а когда вызывается foo()(mark2), должны печататься два. Но почему два печатаются оба раза, и, пожалуйста, объясните, как?
1 ответ
Потому что Perl не является интерпретируемым языком в том виде, в каком вы его понимаете. Perl-код компилируется перед запуском. Там нет отдельного шага компиляции для вас, но компилятор анализирует и компилирует весь исходный код перед началом выполнения программы.
Если бы вы включили use warnings
в вашем коде вы бы увидели следующее предупреждение (до выхода из первого вызова функции):
Подпрограмма foo переопределена в строке функции 12.
Что довольно ясно дает понять, что происходит.
Да, и кстати - //
это не комментарий в Perl. Вы хотели #
,