Perl 为什么'a:::->;func;`有效吗?

Perl 为什么'a:::->;func;`有效吗?,perl,Perl,在我看来,有a::func,a->func就足够了 a::->func对我来说很奇怪,为什么Perl支持这种奇怪的语法?引用Coloric最近的一篇博文,主题是:“避免光词解析歧义。” 为了说明这种语法为什么有用,下面是一个从您的示例演变而来的示例: package a; sub func { print 1; } package main; a::->func; a::是生成字符串a的字符串文字。尽管如此: package a; our $fh; use IO::File; sub s

在我看来,有
a::func
a->func
就足够了


a::->func
对我来说很奇怪,为什么Perl支持这种奇怪的语法?

引用Coloric最近的一篇博文,主题是:“避免光词解析歧义。”

为了说明这种语法为什么有用,下面是一个从您的示例演变而来的示例:

package a;
sub func {
print 1;
}
package main;
a::->func;

a::
是生成字符串
a
的字符串文字。尽管如此:

package a;
our $fh;
use IO::File;
sub s {
    return $fh = IO::File->new();
}

package a::s;
sub binmode {
    print "BINMODE\n";
}

package main;
a::s->binmode; # does that mean a::s()->binmode ?
               # calling sub "s()" from package a; 
               # and then executing sub "open" of the returned object?
               # In other words, equivalent to $obj = a::s(); $obj->binmode();
               # Meaning, set the binmode on a newly created IO::File object?

a::s->binmode; # OR, does that mean "a::s"->binmode() ?
               # calling sub "binmode()" from package a::s; 
               # Meaning, print "BINMODE"

a::s::->binmode; # Not ambiguous - we KNOW it's the latter option - print "BINMODE"


如果您认为语法很奇怪……Perl既不需要理由也不需要借口。Perl就是Perl。@pst-我敢说你会给出一个陌生人:)+1。另一个+1,如果你告诉我如何取消最后两个。@DVK,
chr
是一个非常有用的函数。不过,这里显然不是使用它的地方
v97
是一个版本字符串,用作版本字符串甚至不是特别好。
 a->func()    # Only if a doesn't exist as a function.
 "a"->func()
 'a'->func()
 a::->func()
 v97->func()
 chr(97)->func()
>perl -E"say('a', a, a::, v97, chr(97))"
aaaaa