2016-05-12 6 views
5

私は何年も前からPerlを使用していませんでしたが、古いコードを扱わなければなりません。これは正常に動作します文字列と一時配列を1行のサブに渡しますか?

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

だから私は、一時変数を作成する必要はありませんか?

答えて

6

あなたは配列への参照を作成するために、角括弧を使用することができます。ためには

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

perldoc perlref

+1

ありがとうございます!これはトリックでした! –

+0

また、 'my($ str、@array)= @ _'を代入し、' pass_in($ str、qw(A B C D E));という要素のリストを渡すこともできます。 – Sobrique

1

が配列で渡すことが、あなたは配列を渡す必要があります持っています!

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)); 
関連する問題