¿Qué pasa con el código de abajo? Cuando se ejecuta, me sale: "Uso del valor no inicializado en la concatenación o una cadena en la línea ./main.pl 14 (.)"usando localtime dentro de alose valores por defecto
#!/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();
Si yo no uso localtime() entonces funciona bien. También localtime [2] y [3] no cambian muy a menudo (2 es horas, 3 es mes día) así que el problema no es eso. Si funciono el guión con un depurador, me sale:
x $self
0 Test=HASH(0x3597300)
'message' => HASH(0x3597618)
16 => 'hello'
Así que parece como si me pierdo 'un nivel de indirección, no entendemos para qué ... ¿Alguna idea?
Funciona bien, gracias – mbonnin
Solo para mi comprensión: ¿qué hace el análisis externo {} como en este caso? ¿Es solo ignorado? – mbonnin
Bien, entendido, esta pregunta lo responde: http://stackoverflow.com/questions/1617546/whats-the-history-of-the-in-front-of-a-hashref-that-disambiguates-from-a- código Gracias de nuevo. – mbonnin