Что не так с приведенным ниже кодом? При запуске я получаю: "Use of uninitialized value in concatenation (.) or string at ./main.pl line 14"
#!/usr/bin/perl
package Test;
use Moose;
has 'message' => (isa => 'HashRef', is => 'ro', default => sub{{(localtime)[2] => {(localtime)[3] => "hello"}}});
# the one below works fine
#has 'message' => (isa => 'HashRef', is => 'ro', default => sub{{"18" => {"16" => "hello"}}});
sub show {
my $self = shift;
print("Test: " . $self->message->{(localtime)[2]}->{(localtime)[3]} . "\n");
}
my $o = Test->new();
$o->show();
Если я не использую localtime(), то он работает нормально. Также localtime[2] и [3] не меняются очень часто (2 - часы, 3 - день месяца), так что проблема не в этом. Если я запускаю скрипт с отладчиком, я получаю:
x $self
0 Test=HASH(0x3597300)
'message' => HASH(0x3597618)
16 => 'hello'
Так что похоже, что я "теряю" один уровень косвенности, не совсем понимаю, почему... Есть идеи?