Tôi vừa mới bắt đầu làm việc với Moose và đã gặp phải một vấn đề kỳ lạ mà tôi không thể hiểu được. Các mã sau đây:Hành vi kỳ quặc với Moose, Thử :: Tiny, và TryCatch
#!/usr/bin/env perl
use strict;
use warnings;
use Try::Tiny;
{
package Foo;
use Moose;
has x => (is => 'ro', isa => 'Int');
}
my $f;
try {
$f = Foo->new(x => 'x');
} catch {
die "oops\n";
}
print $f->x . "\n";
sản xuất:
Can't call method "x" on an undefined value at m2.pl line 19.
Tuy nhiên, nếu tôi thay Try::Tiny
với TryCatch
, nó đóng vai trò như tôi sẽ giả định nó nên:
oops
Thậm chí nếu x
là giá trị chính xác, giả sử 5
, Try::Tiny
vẫn sản xuất lỗi undefined value
.
Vì tất cả tài liệu Moose tôi đã đọc đều sử dụng Try::Tiny
, tôi rất bối rối vì sao mã này không hoạt động. Tôi đang làm điều gì đó hoàn toàn sai ở đây?
Gah, một cái nhìn lúng túng. Cảm ơn! – Joe
+1 Để sử dụng tuyệt vời * stanza *. – FMc