Perl 调用subref时的输入错误导致“不是全局引用”`
一位同事在调用subref时的输入错误引发了这个奇怪的语法问题。如果我调用一个没有取消引用箭头的subref,perl将使用Perl 调用subref时的输入错误导致“不是全局引用”`,perl,syntax,glob,Perl,Syntax,Glob,一位同事在调用subref时的输入错误引发了这个奇怪的语法问题。如果我调用一个没有取消引用箭头的subref,perl将使用而不是GLOB引用。但是,如果subref作为一个对象上的方法被调用,那么它可以正常运行 这和地球仪有什么关系?为什么方法调用可以工作 use 5.12.0; use Try::Tiny; my $f = sub { 'sub ref' }; my $obj = bless({}, 'Blessed'); try { say $f($obj); # should
而不是GLOB引用
。但是,如果subref作为一个对象上的方法被调用,那么它可以正常运行
这和地球仪有什么关系?为什么方法调用可以工作
use 5.12.0;
use Try::Tiny;
my $f = sub { 'sub ref' };
my $obj = bless({}, 'Blessed');
try {
say $f($obj); # should be $f->();
} catch {
say "ERROR: $_";
};
say $obj->$f();
输出:
C:\code>perl dispatch.pl
ERROR: Not a GLOB reference at dispatch.pl line 8.
sub ref
say
,像print
一样,接受一个可选的文件句柄/typeglob来将输出指向,例如:
my $f = \*STDERR;
say $f ("This goes to stderr.");
直到现在,我才意识到您可以对子例程引用执行方法调用,但可以肯定的是,perlobj
手册页声明:
如果箭头的右侧是一个标量,其中包含对
子例程,则这相当于调用引用的子例程
直接使用箭头左侧的类名或对象作为其
第一个论点。不进行查找,也不要求
子例程可以在与上的类名或对象相关的任何包中定义
箭头的左边。
say
,像print
一样,接受一个可选的文件句柄/typeglob来将输出指向,例如:
my $f = \*STDERR;
say $f ("This goes to stderr.");
直到现在,我才意识到您可以对子例程引用执行方法调用,但可以肯定的是,perlobj
手册页声明:
如果箭头的右侧是一个标量,其中包含对
子例程,则这相当于调用引用的子例程
直接使用箭头左侧的类名或对象作为其
第一个论点。不进行查找,也不要求
子例程可以在与上的类名或对象相关的任何包中定义
箭头的左边。