2016-05-12 12 views
5

Tôi đã không sử dụng Perl trong nhiều năm nhưng phải đối phó với một số mã cũ.Vượt qua chuỗi và mảng tạm thời thành phụ trong 1 dòng?

tôi đã thực hiện một chương trình con mà tôi muốn vượt qua một chuỗi và một mảng vào:

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

này hoạt động tốt. Nhưng thay vào đó tôi không muốn phải tạo ra một temp_arr. Được nó bằng cách nào đó có thể làm:

Không làm việc:

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

Cũng không hoạt động:

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

Vì vậy, tôi không cần phải tạo một biến tạm thời?

Trả lời

6

Bạn có thể sử dụng dấu ngoặc vuông để tạo ra một tham chiếu đến một mảng:

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

perldoc perlref

+1

Cảm ơn bạn rất nhiều !! điều này đã làm các trick! –

+0

Hoặc bạn có thể gán 'my ($ str, @array) = @ _' và chuyển vào danh sách các phần tử' pass_in ($ str, qw (A B C D E)); ' – Sobrique

1

Để vượt qua một trong mảng, bạn có phải một mảng để vượt qua!

qw() không tạo mảng. Nó chỉ đặt một loạt các vô hướng trên stack. Cái mà bạn đang tìm kiếm là [ ]. Nó thuận tiện tạo ra một mảng, khởi tạo mảng bằng cách sử dụng biểu thức bên trong và trả về một tham chiếu đến mảng đó.

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

Hoặc, bạn có thể viết lại chương trình con của mình để chấp nhận danh sách giá trị.

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)); 
Các vấn đề liên quan