Perl仅使用不带引号的读取行分隔符

时间:2015-07-10 13:47:01

标签: perl

我希望输入记录分隔符s%%4仅在带引号的字符串之外工作。这是一个具体的例子。

我编写了一个Perl工具,它依赖于用分号$/分隔行来提取单个C ++语句,然后逐行处理。我这样做了:

;

不幸的是,在代码引用分号的情况下失败了。例如

$/ = ';';

我可以忍受少量的失误,但对此有一个简单的解决方法吗?

2 个答案:

答案 0 :(得分:3)

一个简单的答案可能是 - 对于大多数代码 - 假设一个'陈述'是行尾的分号。但事实并非必须如此。

然而,'正确行事'可能是Text::ParseWords

#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

use Text::ParseWords;

local $/;
my @statements = quotewords( ";", 0, <DATA> );

print Dumper \@statements;

__DATA__
statement; another statement;
statement2; "some text; with a semicolon"; nothing here;
multi
line
statement ;
here

打印:

$VAR1 = [
          'statement',
          ' another statement',
          '
statement2',
          ' some text; with a semicolon',
          ' nothing here',
          '
multi
line
statement ',
          '
here
'
        ];

答案 1 :(得分:0)

我们可以使用正则表达式来查找并临时替换带引号的分号。

 $_ =~ s/(['"][^;]+)(;)([^;]+['"].*)/$1 QUOTED_SEMI_COLON $3/;    

运行以分号分隔行的脚本后,QUOTED_SEMI_COLON可以替换为';'