我有幾個變量的一類,其中之一是一個散列(_runs):如何與具有散列屬性的Perl對象進行交互?
sub new
{
my ($class, $name) = @_;
my $self = {
_name => $name,
...
_runs =>(),
_times => [],
...
};
bless ($self, $class);
return $self;
}
現在,所有我想要做的就是創建訪問/突變,以及是推動另一子程序新數據加入散列。但我有一段時間讓所有引用/解引用/ $自調用一起工作。我已經燒了我的眼睛與「不能使用字符串(」等「)作爲HASH參考等等」錯誤。
對於訪問器,返回哈希的「最佳實踐」是什麼?這其中的一個選項,我應該使用(如果有的話)?:
return $self->{_runs};
return %{ $self->{_runs} };
return \$self->{_runs};
此外,當我使用其他子程序中的散列類,我該用什麼語法來複制?
my @runs = $self->{_runs};
my @runs = %{ $self->{_runs} };
my @runs = $%{ $self->{_runs} };
my @runs = $$self->{_runs};
也是一樣的遍歷鍵:
foreach my $dt (keys $self->{_runs})
foreach my $dt (keys %{ $self->{_runs} })
又有怎樣實際添加的數據?
$self->{_runs}{$dt} = $duration;
%{ $self->{_runs} }{$dt} = $duration;
$$self->{_runs}{$dt} = $duration;
你明白了。我一直在閱讀關於使用類的文章,以及關於引用和解引用的文章,但我似乎無法讓我的大腦同時結合知識和使用兩者。我最後得到了我的_times數組,但將我的數組語法模仿爲哈希不起作用。
'_runs =>(),'這已經是錯誤了,這必須是一個hashref。 '_runs => {foo => 1,bar => 2,},' – daxim 2010-05-26 15:17:43
但我在調用構造函數時不知道任何鍵,我需要一個空的散列 – brydgesk 2010-05-26 15:27:08
您需要一個空的hashref。 '_runs => {},' – daxim 2010-05-26 15:30:05