【发布时间】:2012-09-07 14:24:20
【问题描述】:
作为尝试用十进制数字替换科学数字的一部分,我想将反向引用保存到字符串变量中,但它不起作用。
我的输入文件是:
,8E-6,
,-11.78E-16,
,-17e+7,
然后我运行以下命令:
open FILE, "+<C:/Perl/input.txt" or die $!;
open(OUTPUT, "+>C:/Perl/output.txt") or die;
while (my $lines = <FILE>){
$find = "(?:,)(-?)(0|[1-9][0-9]*)(\.)?([0-9]*)?([eE])([+\-]?)([0-9]+)(?:,)";
$noofzeroesbeforecomma = eval("$7-length($4)");
$replace = '"foo $noofzeroesbeforecomma bar"';
$lines =~ s/$find/$replace/eeg;
print (OUTPUT $lines);
}
close(FILE);
我明白了
foo bar
foo bar
foo bar
我预期的地方
foo 6 bar
foo 14 bar
foo 7 bar
$noofzeroesbeforecomma 似乎为空或不存在。
即使进行了以下调整,我也得到一个空结果
$noofzeroesbeforecomma = $2;
只有在替换字符串中直接插入$2 才能给我一些东西(不幸的是,这不是我想要的)。
谁能帮忙?
我在 64 位 Windows 7 机器上运行 Strawberry Perl(5.16.1.1-64 位),并且对 Perl 非常缺乏经验
【问题讨论】:
-
在使用匹配或替换运算符来设置它们之前,您先使用
$4和$7。 -
对不起,我误会了吗?您的第二个输入行是
-11.78E-16。如果您尝试捕获指数 _sans 符号_您是否希望在靠近底部的所需输出中看到16而不是14中的foo 14 bar?