如何将带有变量的行拆分为分隔符。变量可以是任何例子
:
,
\s
|
.
或任何字词。
试过这个:
GetOptions (
'f1=s' => \$file1,
"fs1=s" => \$fs1
);
open(fh1, $file1);
while(my $row1 = <fh1>) {
chomp $row1;
@temp=split(/\Q$fs1/, $row1);
}
但这不起作用。我正在将$fs1
(文件分隔符)作为用户的输入。
答案 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
字母进行拆分。