在Perl中,为什么拆分在管道处中断(|)

时间:2018-07-12 17:41:56

标签: perl split pipe

在perl中,拆分为什么在管道(|)处中断。 我有要在"

处分割的字符串
my @temp1 = split(/\"/,$line);

,但这也会在管道(|)处中断。喜欢输入

my_string|is"_ok

输出为

mystring ,  is, _ok

为什么? 为什么不

mystring|, is, _ok

1 个答案:

答案 0 :(得分:3)

您的程序似乎在其他地方包含错误。

运行以下脚本:

use strict; use warnings;
my $line = 'my_string|is"_ok';
print "Source: $line\n";
my @temp1 = split(/"/, $line);
print "Result 1:\n";
my $index;
for my $elem (@temp1) {
    print ++$index, ": $elem\n";
}
@temp1 = split(/["|]/, $line);
print "Result 2:\n";
$index = 0;
for my $elem (@temp1) {
    print ++$index, ": $elem\n";
}

您将获得下面给出的结果

Source: my_string|is"_ok
Result 1:
1: my_string|is
2: _ok
Result 2:
1: my_string
2: is
3: _ok

如您所见,该脚本包含match的2个变体:

  1. 您尝试过,只能用双引号分隔。
  2. 尝试重现您的结果-拆分其中一个  双引号或竖线。

要编写与双引号匹配的正则表达式,则无需 逃脱它。

请注意,在字符类[]之间)中,您甚至 不需要退出竖线。

因此,为了使程序简单易读,请避免不必要的操作 反斜杠。