为什么以下use
行是合法的 Perl 语法?(改编自 POD for parent;在 Cygwin 上的 Perl 5.26.2 x64 上测试。)
package MyHash;
use strict;
use Tie::Hash;
use parent -norequire, "Tie::StdHash";
# ^^^^^^^^^^ A bareword with nothing to protect it!
在 下-MO=Deparse
,use
线变为
use parent ('-norequire', 'Tie::StdHash');
但我无法从use
文档 中看出引用的-norequire
来源。
如果
use strict
没有生效,我会理解的。裸词norequire
会变成字符串"norequire"
,一元减号会变成字符串"-bareword"
,而结果字符串会进入use
导入列表。例如:package MyHash; use Tie::Hash; use parent -norequire, "Tie::StdHash";
同样,如果有一个粗逗号,我会理解的。
-foo => bar
变为"-foo", bar
因为=>
变为foo
,"foo"
然后一元减号再次发挥其魔力。例如:package MyHash; use strict; use Tie::Hash; use parent -norequire => "Tie::StdHash";
这两个示例都为该use
行产生了相同的 deparse。但是,两者都引用了原始示例没有引用。我遗漏了什么使原始示例(带strict
,不带=>
)合法?谢谢!