Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl模块中ref函数的另一个散列_Perl_Methods_Reference - Fatal编程技术网

Perl模块中ref函数的另一个散列

Perl模块中ref函数的另一个散列,perl,methods,reference,Perl,Methods,Reference,我有一个perl对象,它包含coderef(方法)的散列 以下代码用于调用该方法: my $c2 = $self->{Formatter}->{"ENOTE:Final"}($self, $e); 我觉得很奇怪,我不得不这样称呼它。还有其他更好的语法吗?我不会用不起作用的东西来烦你 谢谢 -E如果您正在寻找更多面向对象的语法,那么 my $method = $self->{Formatter}{"ENOTE:Final"}; my $c2 = $self->$metho

我有一个perl对象,它包含coderef(方法)的散列

以下代码用于调用该方法:

my $c2 = $self->{Formatter}->{"ENOTE:Final"}($self, $e);
我觉得很奇怪,我不得不这样称呼它。还有其他更好的语法吗?我不会用不起作用的东西来烦你

谢谢


-E

如果您正在寻找更多面向对象的语法,那么

my $method = $self->{Formatter}{"ENOTE:Final"};
my $c2 = $self->$method($e);

“ENOTE:Final”是一个幸运的引用吗?不,它只是一个以coderef作为值的散列键。由于“:”字符的缘故,这里的引号非常谨慎。它可以在没有引用的情况下工作;我没有尝试。好吧,如果它是一个代码引用。然后,引用本身将不会作为第一个参数传递,就像它是一个受祝福的引用一样。语法的哪一部分是奇怪的?我只是想知道“最佳实践”符号可能是什么。我不会把链式调用称为奇怪的——除了不理解这里的方法是什么以及为什么需要这样的链式调用。出于这个原因,我建议实际上应该把它分解清楚,就像暴民的回答一样。是的,这一个也行。我希望把它放在一行上,这就是为什么我想到了上面那个奇怪的符号。您的答案是原始代码的样子。@ErikBennett它看起来很奇怪的原因是$self既是您要使用的发票,也是包含coderef的结构。所以你需要在这两种情况下都提到它。是的,我现在把它看作是我问题的来源@暴民的回答很好地说明了。。。花时间检查两行中每一行的
$self->
角色后。谢谢,伙计们。