Почему "использование" не допускается, как в "use strict"; в Perl 5.14?
Я пытаюсь использовать следующие соглашения. Мне было поручено использовать для хорошего/правильного/безопасного кода Perl для моей программы "Hello, World!"
:
use strict;
use warnings;
Я создал и успешно выполнил следующую программу "Hello World", используя (Strawberry) Perl 5.12 на моей основной ОС Windows 7:
!#/usr/bin/perl
use strict;
use warnings;
print "Hello, World!\n";
То, что я получил, как и ожидалось, было "Hello, World!"
.
Меня поразило то, что одна и та же программа, запущенная в терминале на моей виртуализированной ОС Linux Mint 14 с использованием Perl 5.14, вызвала следующую ошибку:
"use" not allowed in expression at /PATH/hello_world.pl line 2, at end of line
syntax error at /PATH/hello_world.pl line 2, near "use strict"
BEGIN not safe after errors--compilation aborted at /PATH/hello_world.pl line 3.
Впоследствии я создал другие программы Hello World без строк use strict;
или use warnings;
, а также один с -w
, который я видел в некоторых учебниках, что указывает, если я не ошибаюсь, что предупреждения будут включены.
Обе мои альтернативные версии работали правильно, потому что они дали ожидаемый результат:
Hello, World!
Я не могу быть уверен в том, что мне нужны инструкции use
в Perl-программах из версии 5.14 и выше, или если это нормально писать -w
в конце моей первой строки.
Мне хотелось бы думать, что я могу использовать согласованный заголовок, так сказать, во всех своих программах Perl, будь то Windows или Linux, Perl 5.12 или 5.14 или иначе.
Ответы
Ответ 1
Ваше изображение показывает, что все ваши скрипты начинаются с !#/usr/bin/perl
. Это не верно. Это не действительная строка she-bang, она читается как отрицание !
, за которой следует комментарий #
. Разбор продолжится, и script1.pl perl выполнит ! print "Hello world.\n";
. Это напечатает Hello world
и отрицает результат print
... не очень полезный, но действительный perl.
В script2.pl perl видит ! use strict;
, и это ошибка времени компиляции, и поэтому perl сбой и сообщает об ошибке для строки use strict;
.
Итак, если вы используете правильные строки, все три сценария будут работать как разработанные.
Изменить (добавлены тестовые скрипты):
script1.pl
!#/usr/bin/perl
print "Hello world.\n" ;
Вызов perl script1.pl
дает
Hello world.
script2.pl
!#/usr/bin/perl
use strict;
use warnings ;
print "Hello world.\n" ;
Вызов perl script2.pl
дает
"use" not allowed in expression at script2.pl line 3, at end of line
syntax error at script2.pl line 3, near "use strict "
BEGIN not safe after errors--compilation aborted at script2.pl line 4.
Использование правильного синтаксиса script3.pl
#!/usr/bin/perl
use strict ;
use warnings ;
print "Hello world.\n" ;
Вызов perl script3.pl
дает
Hello world.
Ответ 2
Вы сделали что-то вроде
use warnings
use strict;
вместо
use warnings;
use strict;
На самом деле, я думаю, что это может быть проблема с окончанием строки. У вас есть LF, где у вас должен быть CR LF или наоборот. Я видел, что Perl считает, что код начинается на полпути через строку shebang (например, perl use strict;
)
Как упоминалось в другом месте, код, который вы опубликовали, и код, который вы использовали, различны. Вы действительно использовали
!use strict;
из-за плохой линии shebang.
!#/u... # Negation followed by a comment
должен быть
#!/u... # Shebang