Почему я должен указывать оператор использования при использовании функции say?
Этот вопрос может быть глупым. Но я только начал изучать Perl. Я использую Perl v5.16.2. Я знаю, что оператор say
был введен в 5.10.
#!/usr/bin/perl
say "Hello World!";
Когда я пытаюсь запустить программу выше, я получаю следующую ошибку:
$ ./helloPerl
String found where operator expected at ./helloPerl line 3, near "say "Hello World!""
(Do you need to predeclare say?)
syntax error at ./helloPerl line 3, near "say "Hello World!""
Execution of ./helloPerl aborted due to compilation errors.
Но когда я добавил оператор use 5.016;
, он дает мне правильный вывод.
#!/usr/bin/perl
use 5.016;
say "Hello World!";
Мое сомнение в том, что я использую perl v5.16.2, который выше 5.010. Почему я должен упоминать версию Perl с помощью инструкции use
здесь?
Ответы
Ответ 1
Функции, которые могут нарушить обратную совместимость, по умолчанию не включены.
Смотрите perldoc feature
:
Обычно невозможно добавить новый синтаксис в Perl, не нарушая некоторые существующие программы. Эта прагма обеспечивает способ минимизации этого риска. Новые синтаксические конструкции или новые семантические значения для старых конструкций могут быть включены с помощью функции foo и будут анализироваться только тогда, когда соответствующая функция прагма находится в области видимости. (Тем не менее, префикс CORE:: обеспечивает доступ ко всем ключевым словам Perl, независимо от этой прагмы.)
use
на номере версии, неявно включает все функции, поскольку также применяется ограничение на версию perl. Например, вы не будете опрокидываться, например, say
.
Ответ 2
say
является функцией, он не является (еще когда-нибудь) регулярным синтаксисом perl.
Используйте
use feature qw(say);
или
use v5.010; # or any version later