从下面的代码我想存储正则表达式结果变量内容(即$ fh结果到新文件名)。我该怎么办?
有没有可能的方法来获取用新文件写的正则表达式变量输出(即$fh
输出)?
这是我的代码:
use strict;
use warnings;
open my $fh,'<',"open.txt" or die "$!";
while(<$fh>)
{
$fh=s/("\d+|\d+|")\s*/$1/g;
print $fh;
}
close $fh;
错误:
readline() on unopened filehandle 1 at fr.pl line 7.
close() on unopened filehandle 1 at fr.pl line 9.
Open.txt
1
2
3
radio
vendor
version114
version115
输出:
注意: $ fh具有正则表达式值。现在这些$ fh值应该存储在新文件中并打印相同的内容,如下所示。
radio
vendor
version
version
答案 0 :(得分:2)
我不完全确定你要做什么。但我可以看到是什么导致你的错误。问题是这一行:
$fh=s/("\d+|\d+|")\s*/$1/g;
在执行此行代码之前,$fh
包含您正在从中读取数据的文件句柄。但是使用这行代码,您可以使用替换结果覆盖该值。这要么是取代的数量(这是一个整数),要么是空字符串(如果替换失败)。在这两种情况中的任何一种情况下,$fh
将不再包含您的文件句柄。
因此,在循环的第一次迭代结束时,$fh
不再包含文件句柄。因此,当您在第二次迭代开始时执行while (<$fh>)
时,这将失败(因为,正如错误所述,$fh
不是一个打开的文件句柄)。该读取失败并跳过循环。执行的下一行是调用close()
。而且也因为完全相同的原因而失败。
我完全不确定你认为这行代码是做什么的。但是实际上做的是破坏你的程序: - )
更新:我怀疑阅读(更重要的是,了解)Perl常见问题解答How do I change, delete, or insert a line in a file, or append to the beginning of a file?将是一个非常有利可图的时间利用你的时间。您似乎无法理解基本文件操作的工作原理。