perl - 为什么这个片段提示 'Can' t locate object method "this"via package "t"' 而不仅仅是运行失败?

标签 perl

在一个旧脚本中发现了一个拼写错误,但我不明白这一行是如何通过 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/

相关文章:

python - 对于 Python 程序员来说,有什么与 Perl 的 CPAN 等效的东西吗?

php - 从 PHP 获取数据并在 perl 中处理

perl - 未记录的Perl变量%_?

windows - 使用Perl获取硬盘信息

Perl - 通过包含 require 指令的 SSH 远程运行脚本

perl - 如何清除 Perl 哈希值

Perl 在解压浮点值时的奇怪行为

regex - 删除具有特定模式的行

mysql - 如何在 Perl 中创建 MySQL 风格的时间戳?

perl - 具有类型约束检查的 Set::Object