我的一个项目包含很多简单的方法调用。我想 不带圆括号称呼它们,以避免混乱,并使频繁修改更容易。不带圆括号的Perl方法调用
我做了以下测试。
用括号(显然作品):
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为什么不允许它的真正原因,因为似乎没有任何含糊之处。对于潜艇我们有“使用潜艇”,也许类似的方法存在?
为了完整性,有没有办法避免在上面的例子中的'say2'子,仍然没有括号调用?
也许有某种黑客或诡计可能?
原型是不相关的。带参数的子程序可以不带圆括号调用,方法不能。为什么? 'say'有点奇怪,它接受一个文件句柄,后面没有逗号。 '说转储$倾卸器;'是困难的,但我认为'缩进$倾销,0;'应该按预期工作。尽管我不太在意间接语法。 我的主要问题是没有答案。'$ dumper->缩进(0);'vs'$ dumper->缩进0;'。后者不起作用。为什么?很明显这是一个方法调用,它还有什么用?没有参数,Perl知道,但它不知道。奇怪。为什么?也许有可能是黑客或诡计? – barney765 2014-10-17 20:08:43