请解释为什么在函数定义之上调用这些Perl函数的方式决定了它们是否运行。
\$PATH
答案 0 :(得分:7)
如果解析器知道有问题的标识符引用了函数,则只能在函数调用中省略括号。
您的第一个foo;
不是函数调用,因为解析器还没有看到sub foo
(并且foo
不是内置函数。)
如果您在顶部使用use strict; use warnings;
,则会将其标记为错误。
答案 1 :(得分:3)
引用perldata,
在语法中没有其他解释的单词将被视为带引号的字符串。这些被称为“赤字”。
这意味着foo
相当于"foo"
,而没有一个子声明给它一个替代解释。
$ perl -e'my $x = foo; print("$x\n");'
foo
这被视为错误功能,因此被use strict;
(或更具体地,use strict qw( subs );
)禁用以捕获拼写错误。
$ perl -e'use strict; my $x = foo; print("$x\n");'
Bareword "foo" not allowed while "strict subs" in use at -e line 1.
Execution of -e aborted due to compilation errors.
始终使用use strict; use warnings qw( all );
!