我希望输入记录分隔符s%%4
仅在带引号的字符串之外工作。这是一个具体的例子。
我编写了一个Perl工具,它依赖于用分号$/
分隔行来提取单个C ++语句,然后逐行处理。我这样做了:
;
不幸的是,在代码引用分号的情况下失败了。例如
$/ = ';';
我可以忍受少量的失误,但对此有一个简单的解决方法吗?
答案 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可以替换为';'