2012-03-13 28 views
7

Tôi gặp vấn đề lạ khi khớp mẫu.Kết hợp mẫu Perl khi sử dụng mảng

Xem xét các mã Perl dưới đây

#!/usr/bin/perl -w 

use strict; 
my @Array = ("Hello|World","Good|Day"); 

function(); 
function(); 
function(); 

sub function 
{ 
    foreach my $pattern (@Array) 
    { 
    $pattern =~ /(\w+)\|(\w+)/g; 
    print $1."\n"; 
    } 
    print "\n"; 
} 

__END__ 

Kết quả tôi mong đợi nên


 
Hello 
Good 

Hello 
Good 

Hello 
Good 

Nhưng những gì tôi nhận được là

 
Hello 
Good 

Use of uninitialized value $1 in concatenation (.) or string at D:\perlfiles\problem.pl li 
ne 28. 
Use of uninitialized value $1 in concatenation (.) or string at D:\perlfiles\problem.pl li 
ne 28. 

Hello 
Good 

Điều tôi quan sát được là mẫu khớp với nhau.
Ai đó có thể giải thích cho tôi vấn đề liên quan đến mã này là gì.
Để sửa lỗi này tôi đã thay đổi chức năng chương trình con để một cái gì đó như thế này:

sub function 
{ 
    my $string; 
    foreach my $pattern (@Array) 
    { 
     $string .= $pattern."\n"; 
    } 
    while ($string =~ m/(\w+)\|(\w+)/g) 
    { 
      print $1."\n"; 
    } 
    print "\n"; 
} 

Bây giờ tôi nhận được đầu ra như mong đợi.

Trả lời

6

Đây là công cụ sửa đổi toàn cầu /g đang hoạt động. Nó ghi nhớ vị trí của mẫu phù hợp cuối cùng. Khi nó đến cuối chuỗi, nó bắt đầu lại.

Xóa bộ sửa đổi /g và nó sẽ hoạt động như bạn mong đợi.

+0

Tôi đã xóa/sửa đổi g. Nó hoạt động như mong đợi. – vels

Các vấn đề liên quan