2013-10-04 60 views
1

的問題是,它返回象分流未定義值如何用'|'分割在Perl

B 
e 
c 
k 
y 
. 

分割字符串Perl代碼

sub start_thread { 
my @args = @_; 
print('Thread started: ', @args, "\n"); 
open(my $myhandle,'<',@args) or die "unable to open file"; # typical open call 
my @aftersplit; 
for (;;) { 
    while (<$myhandle>) { 
    chomp; 
    @aftersplit = split('|',$_); 
    #print $_."\n"; 
    foreach my $val (@aftersplit){ 
     print $val."\n"; 
     } 
    } 
    sleep 1; 
    seek FH, 0, 1;  # this clears the eof flag on FH 
} 
} 

它在$分割字符串_並保存在陣列aftersplit

回答

3

你必須轉義|,因爲它是正則表達式中的特殊字符,

my @aftersplit = split(/\|/, $_); 
+0

恕我直言,混亂,部分源於一個事實,即第一個參數是一個正則表達式,而不是一個串 - 並因此特殊字符必須進行轉義 - 然而通常看到單引號。 – fenway

3

你需要逃避特殊字符|\

@aftersplit = split('\|',$_); 
2

你需要逃避你的分隔符,因爲它是一個特殊字符。

對於需要用文字\

my @aftersplit = split '\|', $_; 

您還可以使用quotemeta先於你的性格某些特殊字符。

my $separator = quotemeta('|'); 
my @aftersplit = split /$separator/, $_; 

或實現轉義序列\Q

my @aftersplit = split /\Q|/, $_;