返回perl的多个变量

时间:2014-03-16 01:31:31

标签: perl subroutine

我有这个

sub test
{
my ($arg1, $arg2) = @_;  # Argument list
code
return ($variable1, $variable2);
}

所以,当我通过

来调用它时
test('text1','text2');

将两个返回值连接在一起。我怎样才能一次只召唤一个?

3 个答案:

答案 0 :(得分:1)

my $output_choice_1 = ( test('text1','text2') )[0];
my $output_choice_2 = ( test('text1','text2') )[1];

或两者同时出现:

my ( $output_choice_1, $output_choice_2 ) = test('text1','text2');

虽然有时它会使更清晰的代码返回hashref:

sub test {
    ...
    return { 'choice1' => $variable1, 'choice2' => $variable2 };
}
...
my $output_choice_1 = test('text1','text2')->{'choice1'};

答案 1 :(得分:0)

您是否在询问如何将sub返回的两个值分配给两个不同的标量?

my ($var1, $var2) = test('text1', 'text2');

答案 2 :(得分:0)

我对在Google中发现的内容并不满意,因此将解决方案发布在这里。

从子返回数组。

特别是带有反斜杠的语法使我很头疼。

#!/usr/bin/perl

use warnings;
use strict;

use Data::Dumper;

sub returnArrayWithHash {
  (my $value, my %testHash) = @_;

  return ( $value, \%testHash );
}

my %testHash = ( one => 'foo' , two => 'bar' );

my @result = returnArrayWithHash('someValue', %testHash);

print Dumper(\@result) . "\n";

返回我

$VAR1 = [
          'someValue',
          {
            'one' => 'foo',
            'two' => 'bar'
          }
        ];