문제

Perl 서브 루틴에서 여러 값을 반환하고 대량으로 할당하고 싶습니다.

이것은 시간 중 일부가 작동하지만 값 중 하나가 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은 Undef 요소를 무시하고 값을 연결하는 것으로 보입니다.파이썬이나 Ocaml과 같은 파괴 할당은 내가 기대하고있는 것입니다.

여러 변수에 반환 값을 할당하는 간단한 방법이 있습니까?

편집 : 여기에서는 구조화 된 데이터를 전달하는 데 사용하는 방법이 있습니다.@A 배열은 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]);
.

도움이 되었습니까?

해결책

여기에 연결에 의해 의미하는 바를 확실하지 않습니다 :

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]);
.

인쇄

$VAR1 = [
          'hmm',
          'zap',
          [
            'a1',
            'a2'
          ]
        ];
.

동안 :

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]);
.

인쇄물 :

$VAR1 = [
          'hmm',
          undef,
          [
            'a1',
            'a2'
          ]
        ];
.

$ OTTIONVAL이 'ZAP'대신에 UNDEF가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top