我想知道这个子程序在Perl中做了什么.我相信我有一般的想法,但我想知道一些语法.
sub _init
{
my $self = shift;
if (@_) {
my %extra = @_;
@$self{keys %extra} = values %extra;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我认为它的作用:基本上将任何"额外"键值对添加到由变量$ self引用的无名哈希中.此外,我不是100%肯定这一点,但我认为my $self = shift实际上是指$self调用_init()子程序的变量.
我的具体问题是:
_init()吗?@$写作时的语法意思@$self{keys %extra} = values %extra;你的理解是正确的。这允许类的用户将他们想要的任何参数设置到对象中。
是的。例如,如果您调用$myobject->_init('color', 'green'),则此代码将设置$myobject->{'color'} = 'green'。
这是一个有点令人困惑的哈希运算。keys %extra是一个列表(显然是键)。我们在这里有效地使用了“哈希片”。将其想象为一个数组切片,您可以在其中调用@$arrayref[1, 3, 4]. 我们在这里使用符号是因为我们正在讨论一个列表 - 它是与 引用的哈希中的@键列表相对应的值列表。keys %extra$self
另一种写法是:
foreach my $key (keys %extra) {
$self->{$key} = $extra{$key};
}
Run Code Online (Sandbox Code Playgroud)