代码如下:
#!/usr/bin/perl
print 1;
{
require shift;
}
事实证明,当我运行./script script
时,会打印两个1
。
所以我的脚本文件实际加载了两次?这是一个错误吗?
根据文件:
“require”要求包含库文件(如果尚未包含库文件) 被包括在内。
答案 0 :(得分:4)
require
只会在以前加载了require
,use
或do
的文件时跳过加载文件,而不会加载作为主要脚本加载的文件。
请参阅:%INC
答案 1 :(得分:3)
不,这不是错误。你的脚本打印1,然后需要第一个参数的名称,在这种情况下你提供了名称'script',它再次运行你的脚本打印第二个参数。
见Require;
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
答案 2 :(得分:0)
当我运行你的代码时,我得到:
$ ./script script
Null filename used at script line 5.
Compilation failed in require at ./script line 5.
11$
所以我无法重现你的结果......;)
你做出了一个错误的假设:你的脚本被称为'脚本'的事实与use
d require
d do
ne无关。 。require
语句是第一次需要的东西。