请看下面的脚本。第一次调用do_stuff(...)
,虽然它没有错误,但打印names: $VAR1 = undef;
.
第二次调用do_stuff(...)
, 按我预期的方式工作并打印names: $VAR1 = 'Second Name';
我有一些问题:
- 第一次调用do_stuff时使用什么包Foo?
- 编译器不应该抛出错误而不是使用看起来不正确的类吗?
编码:
use warnings;
use 5.018;
use Data::Dumper;
do_stuff('First Name');
{
package Foo;
use Moo;
use Data::Dumper;
has names => (is => 'ro', required => 1);
sub get_name {
my $self = shift;
say "names: ".Dumper($self->{names});
}
1;
}
do_stuff('Second Name');
sub do_stuff{
my $names = shift;
my $x = Foo->new(names => $names);
$x->get_name();
}