2013-10-04 2 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

ИМХО, часть путаницы проистекает из того факта, что первый аргумент является регулярное выражение PATTERN, а не строка - и, следовательно, специальные символы должны быть экранированы - и, тем не менее, общие одиночные кавычки. – fenway

3

Вам нужно бежать специальный символ | с \

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

Вам нужно бежать разделитель, так как это особый характер.

Для некоторых специальных символов, которые необходимо предварить свой характер с буквальным \

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

Вы также можете использовать quotemeta.

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

Или реализовать управляющие последовательности \Q

my @aftersplit = split /\Q|/, $_; 
Смежные вопросы