我在 perl 模块中多次遇到这条线,但我无法弄清楚这到底意味着什么。
my ($self, %myInputs) = @_;
请解释我的声明,以便我可以继续。
我在 perl 模块中多次遇到这条线,但我无法弄清楚这到底意味着什么。
my ($self, %myInputs) = @_;
请解释我的声明,以便我可以继续。
我猜这是类方法函数中的第一行之一。该行解析@_
函数参数列表,并提取第一个参数,该参数始终是对对象的引用,并将$self
其余参数提取到哈希 %myInputs
中。这当然假设函数是用哈希格式的参数调用的,就像下面的 Perl/Tk 函数
$mw->Button(-text => "RIGHT", -command => sub { exit })
->pack(-side => 'right', -fill => 'both');
我的 ($self, %myInputs) = @_;
并非所有函数都接收第一个参数$self
。事实上,按照惯例,只有那些使用箭头操作符调用的才会这样做->
;隐式调用->
会发送一个引用该对象的特殊参数。perl 中的所有函数和方法都以相同的方式声明(使用关键字sub
)。只有调用确定函数是否是方法。
这my ($foo, $bar) = ( $x, $y );
称为并行分配。这就是这里发生的一切!
观察可以从 Perl 中的数组初始化散列。
my @foo = qw/ foo bar baz quz /;
my %hash = @foo;
print $hash{foo}; # outputs bar
因为您分配给 hash %myInputs
,所以哈希被显式分配给所有不是隐式发送的输入(因为您将那个输入拉到$self
)。但是请注意,执行以下操作没有多大意义?
my @foo = qw/ foo bar baz /;
my %hash = @foo;
print $hash{baz} # what is this set too??
出于同样的原因,使用不均匀数量的参数调用您的函数也没有多大意义!两者都会产生警告。
在 Perl@_;
中是一个全局数组特殊变量
类似于@ARGV
数组包含用于脚本的命令行参数。
所以在my ($self, %myInputs) = @_;
@_
将表示$
Hash-Variables 中变量的参数%