如何使用perl将正则表达式变量的结果写入新文件?

时间:2017-06-21 11:19:46

标签: perl

从下面的代码我想存储正则表达式结果变量内容(即$ 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

1 个答案:

答案 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?将是一个非常有利可图的时间利用你的时间。您似乎无法理解基本文件操作的工作原理。