Perl 在moose默认值中使用localtime

Perl 在moose默认值中使用localtime,perl,default,moose,Perl,Default,Moose,下面的代码有什么问题?运行时,我得到:“在连接(.)中使用未初始化的值或在./main.pl第14行使用字符串” 如果我不使用localtime(),那么它可以正常工作。此外,localtime[2]和[3]不会经常更改(2是小时,3是月日),因此问题并不是这样。如果使用调试器运行脚本,则会得到: x $self 0 Test=HASH(0x3597300) 'message' => HASH(0x3597618) 16 => 'hello' 所以看起来我“失去

下面的代码有什么问题?运行时,我得到:“在连接(.)中使用未初始化的值或在./main.pl第14行使用字符串”

如果我不使用localtime(),那么它可以正常工作。此外,localtime[2]和[3]不会经常更改(2是小时,3是月日),因此问题并不是这样。如果使用调试器运行脚本,则会得到:

x $self
0  Test=HASH(0x3597300)
   'message' => HASH(0x3597618)
      16 => 'hello'

所以看起来我“失去”了一个间接层次,不知道为什么。。。有什么想法吗?

外部的
{}
不作为hashref进行解析。添加一个显式的
返回:

has 'message'     => (isa => 'HashRef', is => 'ro', default => sub{ return {(localtime)[2] => {(localtime)[3] => "hello"}} });

强制执行此操作的
+
也能起作用

has 'message'     => (isa => 'HashRef', is => 'ro', default => sub{ +{(localtime)[2] => {(localtime)[3] => "hello"}} });

我的理解是:在这种情况下,外部{}解析什么?是被忽略了吗?好的,明白了,这个问题回答了:再次感谢。
has 'message'     => (isa => 'HashRef', is => 'ro', default => sub{ +{(localtime)[2] => {(localtime)[3] => "hello"}} });