在一个旧脚本中发现了一个拼写错误,但我不明白这一行是如何通过 perl -cw 的:
$ perl -w -e 'my $t = "t"; this{$t} '
Can't locate object method "this" via package "t" (perhaps you forgot to load "t"?) at -e line 1.
$ perl -w -e 'my $t; this{$t} '
Can't call method "this" on an undefined value at -e line 1.
错误是散列 %this
缺少 $
sigil 但为什么 perl 认为我在这里尝试引用一个对象?
最佳答案
$ perl -MO=Deparse -e 'this{$t}'
this {
$t
} ;
$ perl -we 'sub this{42} ; this{$t}'
Name "main::t" used only once: possible typo at -e line 1.
Odd number of elements in anonymous hash at -e line 1.
Use of uninitialized value $t in anonymous hash ({}) at -e line 1.
$ perl -we 'sub this{42} ; this{42,43}'
# No output
Perl 正在将 {$t}
解析为匿名散列引用,并期望 this
是一个可以接受该引用作为参数的子例程。在 Perl 找不到名为 this
的子例程后,它会尝试查看该构造是否可以解析为间接对象语法。即,它识别 {$t}
的对象类型,并在该对象类型的命名空间中查找方法 this
。这是解析器尝试的最后一个解析方法,因此当它失败时,您会从解析器的该部分获得错误消息。
关于perl - 为什么这个片段提示 'Can' t locate object method "this"via package "t"' 而不仅仅是运行失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60566480/