【发布时间】:2014-07-18 15:51:52
【问题描述】:
我正在编写一个 Perl 模块,并且在运行测试时遇到了这个令人困惑的错误消息。
sub new {
my $class = shift;
my $self = @_;
$word = $self{word} || die "No word provided.";
@definitions = @{decode_json(get($urban_url . $word))->{'list'}} || die "Error during fetch/decode.";
@tags = @{decode_json(get($urban_url . $word))->{'tags'}} || "Error during fetch/decode.";
bless($self, $class);
return $self;
}
如您所见,$self 已正确声明。 word 是在new 子例程之上声明的全局变量。在use语句的每个测试中都会发生失败,并追溯到$word的分配。
【问题讨论】:
-
是的,确实如此。代表我犯了愚蠢的错误。我将其更改为
my ($class, %self) = @_;,现在它似乎可以正常工作了。 -
在这种情况下不要使用
%self名称。使用%in或%params。 -
@woodruffw:正如 Vadim 所说,不要使用名为
%self的哈希。$self始终是对当前对象的(标量)祝福引用 -
我没有意识到这一点。谢谢。
标签: perl oop perl-module