1

問題は、未定義の値で分割のように返されることです

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 に保存します

4

3 に答える 3

3

|正規表現では特殊な文字なのでエスケープする必要がありますが、

my @aftersplit = split(/\|/, $_);
于 2013-10-04T06:28:05.033 に答える
3

|で特殊文字をエスケープする必要があります\

@aftersplit = split('\|',$_);
于 2013-10-04T06:28:06.170 に答える
2

デリミタは特殊文字であるため、エスケープする必要があります。

特定の特殊文字については、文字の前にリテラルを付ける必要があります\

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

quotemetaも使用できます。

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

またはエスケープシーケンスを実装する\Q

my @aftersplit = split /\Q|/, $_;
于 2013-10-04T06:45:43.640 に答える