A atribuição de valores múltiplos em perl, problemas com undef
Pergunta
Eu quero retornar vários valores de um perl de sub-rotina e atribuir-los em massa.
Isso funciona por um tempo, mas não quando um dos valores é 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 os valores, ignorando undef elementos.Desestruturação atribuição como no Python ou OCaml é o que eu estou esperando.
Existe uma maneira simples para atribuir um valor de retorno para várias variáveis?
Editar:aqui é a maneira que eu agora uso para passar dados estruturados ao redor.A @a matriz precisa ser passado por referência, como MkV sugerido.
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]);
Solução
Não sei o que você quer dizer com concatenação aqui:
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]);
impressões
$VAR1 = [
'hmm',
'zap',
[
'a1',
'a2'
]
];
enquanto que:
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]);
impressões:
$VAR1 = [
'hmm',
undef,
[
'a1',
'a2'
]
];
A única diferença é que os $otherval é agora undef em vez de 'zap'.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow