我的一个项目包含许多简单的方法调用。为了避免混乱,使频繁修改更容易,我希望能够不使用括号来调用它们。
我进行了以下测试。
带括号的调用 (显然可以工作):
my $something = [1, 2, 3];
my $dumper = Data::Dumper->new([$something]);
$dumper->Indent(0);
say $dumper->Dump();
现在不需要括号了(仅适用于没有参数的方法)。
my $something = [1, 2, 3];
# my $dumper = Data::Dumper->new [$something]; # syntax error
my $dumper = Data::Dumper->new([$something]);
# $dumper->Indent 0; # Number found where operator expected
$dumper->Indent(0);
say $dumper->Dump; # works!
我还测试了间接语法。我知道它存在的问题,但如果它可以正常工作,那么这可能是一个选项。但事实并非如此。
sub say2 { say @_; return; }
my $something = [1, 2, 3];
my $dumper = new Data::Dumper [$something]; # works!
# Indent $dumper, 0; # No error, but doesn't do what supposed to happen
Indent $dumper(0); # works
# say Dump $dumper; # say() on unopened filehandle Dump
say2 Dump $dumper; # works
有没有一种方法可以在不使用括号的情况下持续地调用方法?我不明白为什么Perl不允许这样做,因为似乎并不存在任何歧义。对于子例程,我们有“use subs”,也许方法也存在类似的方式?
为了完整起见,在上面的示例中,是否有一种避免使用'say2'子例程但仍无需使用括号调用的方法?
也许有某种骗局或诀窍可行?
say
有点奇怪,它接受一个文件句柄,后面没有逗号。say Dump $dumper;
很难理解,但我认为Indent $dumper, 0;
应该按预期工作。虽然我不太关心间接语法。我的主要问题还没有得到答复。$dumper->Indent(0);
与$dumper->Indent 0;
的区别。后者不起作用。为什么?很明显这是一个方法调用,还能是什么?没有参数,Perl 可以识别,但有参数就不行了。奇怪。为什么?也许有一些技巧或者黑科技可以解决? - barney765