将字符串和临时数组传递到1行中的子?

时间:2016-05-12 13:10:21

标签: perl

我多年没有使用Perl,但必须处理一些旧代码。

我制作了一个子程序,我希望将一个字符串和一个数组传递给:

sub pass_in {
    my ($str, $array) = @_;
    for my $e (@$array) {
        print "I see str $str and list elem: $e\n";  
    }
    return 0;
}

my @temp_arr =  qw(A B C D E);
my $str = "hello";
pass_in( $str, \@temp_arr );

这很好用。但相反,我不想创建temp_arr。是否有可能这样做:

不起作用:

pass_in( $str, qw(A B C D E));

也不起作用:

pass_in( $str, \qw(A B C D E));

所以我不必创建临时变量?

2 个答案:

答案 0 :(得分:6)

您可以使用方括号来创建对数组的引用:

void createMapView(JPanel parent) {
    MapView view = new MapView();
    parent.add(view);
}

perldoc perlref

答案 1 :(得分:1)

为了传递一个in数组,你必须要传递一个数组!

qw()不会创建数组。它只是将一堆标量放在堆栈上。您正在寻找的是[ ]。它可以方便地创建一个数组,使用表达式初始化数组,并返回对数组的引用。

pass_in( $str, [qw( A B C D E )] );

或者,您可以重写子例程以接受值列表。

sub pass_in {
    my $str = shift;
    for my $e (@_) {
        print "I see str $str and list elem: $e\n";  
    }

    return 0;
}

pass_in( "hello", qw( A B C D E ) );