1

请看下面的脚本。第一次调用do_stuff(...),虽然它没有错误,但打印names: $VAR1 = undef;.

第二次调用do_stuff(...), 按我预期的方式工作并打印names: $VAR1 = 'Second Name';

我有一些问题:

  1. 第一次调用do_stuff时使用什么包Foo?
  2. 编译器不应该抛出错误而不是使用看起来不正确的类吗?

编码:

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();
}
4

0 回答 0