Perl分裂在任何分隔符上

时间:2016-05-09 05:49:51

标签: perl split

如何将带有变量的行拆分为分隔符。变量可以是任何例子 : , \s | .或任何字词。

试过这个:

GetOptions (
    'f1=s' => \$file1,
    "fs1=s" => \$fs1
);

open(fh1, $file1);

while(my $row1 = <fh1>) {
    chomp $row1;
    @temp=split(/\Q$fs1/, $row1);
}

但这不起作用。我正在将$fs1(文件分隔符)作为用户的输入。

2 个答案:

答案 0 :(得分:0)

只要您没有指定任何正则表达式元字符

,您的代码就可以正常工作
use strict;
use warnings 'all';

my $fs1 = ':=';

my $row1 = 'a:=b:=c:=d:=e';

my @fields = split /\Q$fs1/, $row1;

use Data::Dump;
dd \@fields;

输出

["a" .. "e"]

我能想到的唯一问题是,如果您指定\s之类的内容,那么\Q将会转义它,以便您将分割两个字符反斜杠后跟{{1}而不是空格字符。也许你只需要删除s?但是你必须在输入行

中转义方括号,大括号,管道等字符

答案 1 :(得分:-2)

\Q是引用的开始,你应该\E来结束引用:

@temp = split(/\Q$fs1\E/, $row1);

要查看那里发生了什么,您可以尝试quotemeta。它与\Q ... \E完全相同:

print quotemeta($fs1);

如果$fs1类似字母,数字或RegEx特殊字符,可能是+*,则此功能可用。

如果您想要传递RegEx特价,请删除\Q

@temp = split(/$fs1/, $row1);

现在$fs1可能包含\s,可以在任何类似空格的字符处进行拆分,或a+以任意数量的a字母进行拆分。