我在perl模块中经常遇到过这一行,但我无法弄清楚这究竟意味着什么。
my ($self, %myInputs) = @_;
请向我解释声明,以便我可以继续。
答案 0 :(得分:8)
我猜这是类方法函数中的第一行。该行解析@_
list of the function arguements,提取第一个参数,它始终是对象的引用到$self
并将其余部分提取为哈希 %myInputs
。这个当然假设函数是用哈希格式的参数调用的,比如下面的Perl / Tk函数
$mw->Button(-text => "RIGHT", -command => sub { exit })
->pack(-side => 'right', -fill => 'both');
答案 1 :(得分:6)
my($ 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
因为您正在分配散列%myInputs
,所以散列会明确分配所有不是隐式发送的输入(因为您将其中的一个输入{{1} }})。但要小心,做到以下情况没有多大意义?
$self
出于同样的原因,用不均匀的参数调用你的函数也没有多大意义!两者都会产生警告。
答案 2 :(得分:1)
在Perl @_;
中是全局数组特殊变量
与@ARGV
类似。数组包含用于脚本的命令行参数。
所以在my ($self, %myInputs) = @_;
@_
代表Hash-Variables $
中变量%
的参数