Вызов функции 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. Вы хотели #,

Другие вопросы по тегам