Perl сообщение об ошибке "Do you need to predeclare say?"

Для того чтобы вывести строку на экран в языке программирования Perl есть встроенная функция print. Но кроме print еще есть и say.

Использование say в скриптах

Если просто попытаться использовать say в Perl скрипте, то будет ошибка. Вот пример скрипта с ошибкой:

▶ Run
#!/usr/bin/perl

say 'Hello';

Если сохранить этот код в файл script.pl и выполнить perl script.pl, то на экране появится ошибка:

String found where operator expected at script.pl line 3, near "say 'Hello'"
    (Do you need to predeclare say?)
syntax error at script.pl line 3, near "say 'Hello'"
Execution of script.pl aborted due to compilation errors.

Для того чтобы все-таки воспользоваться say нужно явно сказать что мы хотим использовать эту фичу языка с помощью use feature qw(say);. Вот полный текст скрипта который работает:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say 'Hello';

Результат работы скрипта — на экране появится текст Hello.

Использование say в однострочниках

Некоторые задачи очень удобно решать с помощью Perl однострочников, когда весь текст программы находятся не в файле, а передается значением параметра -e в командной строке.

Но если просто запустить perl -e 'say "Hello"', то на экране появится ошибка:

String found where operator expected at -e line 1, near "say "Hello""
    (Do you need to predeclare say?)
syntax error at -e line 1, near "say "Hello""
Execution of -e aborted due to compilation errors.

Для того чтобы использовать say в однострочнике можно использовать тот же способ что и для скриптов: написать в командной строке perl -e 'use feature qw(say); say "Hello"'.

Но гораздо удобнее использовать параметр -E вместо -e. Параметр -E включает все фичи языка, так что запуск perl -E 'say "Hello"' выведет на экран ожидаемую строчку Hello.

Другие статьи

Комментарии