yos*_*ian 0 oop perl perl-module
我正在编写一个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;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,$self声明正确.word是在new子例程上面声明的全局变量.失败发生在use语句的每个测试中,并追溯到分配$word.
标量$self已声明,但您使用的是不存在的哈希值%self.
my $self = @_;
... $self{word} ...
Run Code Online (Sandbox Code Playgroud)
应该
my %args = @_;
... $args{word} ...
Run Code Online (Sandbox Code Playgroud)
当然,你还需要$self.您希望它是对新空哈希的引用.你需要:
my $self = {}; # Creates an anon hash and places a reference to it in $self.
Run Code Online (Sandbox Code Playgroud)
接下来,以下内容不能满足您的需求.
my @foos = @{ REF } || die(LIST);
Run Code Online (Sandbox Code Playgroud)
以下将:
my @foos = @{ REF } or die(LIST);
Run Code Online (Sandbox Code Playgroud)
以下可能会更有用:
my $foos = REF or die(LIST);
Run Code Online (Sandbox Code Playgroud)
最后,您实际上从未将数据存储在对象中.
my $data = decode_json(get($urban_url . $word));
or die("Error during fetch/decode\n");
$self->{definitions} = $data->{list};
$self->{tags} = $data->{tags};
Run Code Online (Sandbox Code Playgroud)
经过几次样式更改后,您将获得我使用的内容.
sub new {
my ($class, %args) = @_;
my $word = $args{word}
or die("No word provided");
my $data = decode_json(get($urban_url . $word));
or die("Error during fetch/decode\n");
my $self = bless({}, $class);
$self->{definitions} = $data->{list};
$self->{tags} = $data->{tags};
return $self;
}
Run Code Online (Sandbox Code Playgroud)
我撒了谎.我怀疑我会在对象构造函数中执行Web请求和解析响应.
| 归档时间: |
|
| 查看次数: |
2378 次 |
| 最近记录: |