تعيين قيم متعددة في بيرل ، مشكلة مع أوندف

StackOverflow https://stackoverflow.com/questions/3271658

  •  17-09-2020
  •  | 
  •  

سؤال

أريد إرجاع عدة قيم من روتين بيرل الفرعي وتعيينها بكميات كبيرة.

يعمل هذا بعض الوقت ، ولكن ليس عندما تكون إحدى القيم 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();

يبدو بيرل لسلسلة القيم ، وتجاهل عناصر أوندف.مهمة التدمير كما هو الحال في بيثون أو أوكامل هو ما أتوقعه.

هل هناك طريقة بسيطة لتعيين قيمة الإرجاع إلى عدة متغيرات?

تحرير:هنا هي الطريقة التي تستخدم الآن لتمرير البيانات المنظمة حولها.@صفيف يحتاج إلى أن يتم تمريرها بالرجوع ، كما اقترح مكف.

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'
          ]
        ];

الفرق الوحيد هو أن أوثرفال هو الآن أوندف بدلا من'زاب'.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top