【发布时间】:2010-05-26 15:08:45
【问题描述】:
我有一个包含多个变量的类,其中一个是哈希 (_runs):
sub new
{
my ($class, $name) = @_;
my $self = {
_name => $name,
...
_runs => (),
_times => [],
...
};
bless ($self, $class);
return $self;
}
现在,我要做的就是创建一个访问器/修改器,以及另一个将新数据推送到散列中的子例程。但是我有一个地狱般的时间让所有的引用/取消引用/$self 调用一起工作。 “不能使用字符串 ("blah") 作为 HASH ref 等”错误,我的眼睛都快烧坏了。
对于访问者,返回哈希的“最佳实践”是什么?我应该使用以下哪个选项(如果有)?:
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, }, -
但我在调用构造函数时不知道任何键,我需要一个空哈希
-
你需要一个空的 hashref。
_runs => {},