Это ошибка в Perl 5.8.8? - PullRequest
       13

Это ошибка в Perl 5.8.8?

1 голос
/ 01 августа 2011

Код следующий:

#!/usr/bin/perl

print 1;
{
require shift;                                                                        
}

Оказывается, что когда я запускаю ./script script, печатаются два 1.

То есть мой файл сценария загружается дважды? Это ошибка или нет ??

Согласно документу:

«требуют» требует, чтобы файл библиотеки был включен, если он еще не был включен.

Ответы [ 3 ]

4 голосов
/ 01 августа 2011

require пропускает загрузку файла только в том случае, если он был ранее загружен с require, use или do, а не для чего-либо, загруженного в качестве основного сценария.

См .: % INC

3 голосов
/ 01 августа 2011

Нет, это не ошибка.Ваш скрипт печатает 1, затем требует имя первого аргумента, в этом случае вы указали имя «скрипт», который снова запускает ваш скрипт, печатая второй 1.

См. Требуется ;

The file must return true as the last statement to indicate successful execution of any initialization code, so it's customary to end such a file with 1; unless you're sure it'll return true otherwise. But it's better just to put the 1; , in case you add more statements.

Также вы должны увидеть некоторые ошибки, такие как Null filename used at script line 5

0 голосов
/ 01 августа 2011

Когда я запускаю ваш код, я получаю:

$ ./script script
Null filename used at script line 5.
Compilation failed in require at ./script line 5.
11$

Так что я не могу воспроизвести ваш результат ...;)

Вы делаете ложное предположение: тот факт, чтоваш скрипт называется 'script' и не имеет к этому никакого отношения: use d, require d для do ne ... оператор require - это первый раз, когда что-то требуется.

...