Asignación de múltiples valores en PERL, problemas con UNDEF
Pregunta
Quiero devolver varios valores de una subrutina Perl y asignarlos a granel.
Esto funciona en parte del tiempo, pero no cuando uno de los valores es undef
:
sub return_many {
my $val = 'hmm';
my $otherval = 'zap';
#$otherval = undef;
my @arr = ( 'a1', 'a2' );
return ( $val, $otherval, @arr );
}
my ($val, $otherval, @arr) = return_many();
Perl parece concatenar los valores, ignorando los elementos no del mundo.La asignación de destrucción como en Python o Ocaml es lo que estoy esperando.
¿Hay una forma sencilla de asignar un valor de retorno a varias variables?
Editar: Aquí está la forma en que ahora uso para pasar los datos estructurados.La matriz @A debe pasar por referencia, como sugirió MKV.
use warnings;
use strict;
use Data::Dumper;
sub ret_hash {
my @a = (1, 2);
return (
's' => 5,
'a' => \@a,
);
}
my %h = ret_hash();
my ($s, $a_ref) = @h{'s', 'a'};
my @a = @$a_ref;
print STDERR Dumper([$s, \@a]);
Solución
No estoy seguro de lo que quiere decir con concatenación aquí:
use Data::Dumper;
sub return_many {
my $val = 'hmm';
my $otherval = 'zap';
#$otherval = undef;
my @arr = ( 'a1', 'a2' );
return ( $val, $otherval, @arr );
}
my ($val, $otherval, @arr) = return_many();
print Dumper([$val, $otherval, \@arr]);
imprime
$VAR1 = [
'hmm',
'zap',
[
'a1',
'a2'
]
];
mientras:
use Data::Dumper;
sub return_many {
my $val = 'hmm';
my $otherval = 'zap';
$otherval = undef;
my @arr = ( 'a1', 'a2' );
return ( $val, $otherval, @arr );
}
my ($val, $otherval, @arr) = return_many();
print Dumper([$val, $otherval, \@arr]);
Impresiones:
$VAR1 = [
'hmm',
undef,
[
'a1',
'a2'
]
];
La diferencia única es que $ OWNVAL ahora está undeF en lugar de 'ZAP'.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow