【发布时间】:2015-07-01 21:30:18
【问题描述】:
我正在寻找一种简单的方法来替换多个文本文件中的字符串。在第一个文件中,字符串应替换为数组@arrayF 的第一个元素;在第二个文件中,字符串必须替换为第二个条目等。
我想替换;size=\d+,其中\d+ 是任意数字的通配符。
这是我目前所拥有的:
#!/usr/bin/perl -w
use strict;
use warnings;
my $counter = 0;
my @arrayF = '/Users/majuss/Desktop/filelist.txt>'; # Reads all lines into array
my @files = '/Users/majuss/Desktop/New_Folder/*'; #get Files into an array
foreach my $file ( @files ) {
$file =~ s/;size=\d+/$arrayF[$counter]/g; #subst.
print
$counter++; #increment array index
}
它返回一个零并且什么都没有发生。
我知道如何在单行中做到这一点,但我不知道如何在那里实现数组。
【问题讨论】:
-
您可能希望在末尾使用选项 /ge 而不仅仅是 /g。见 perldoc perlre
-
您的“@files”没有扩展模式。你需要
my @files = glob ( '/Users/majuss/Desktop/New_Folder/*' );你也没有打开或阅读'filelist.txt' - 你需要使用open。 -
注释
Reads all lines into array和get Files into an array的行没有这样做。您需要在第一种情况下打开文件并读取它,在第二种情况下使用glob。另外,请不要在本地标识符中使用大写字母,并且不要在 shebang 行中使用-w以及use warnings;只是后者是正确的 -
如果您有
-w开关,则不需要use warnings(反之亦然);他们做同样的事情。如果每行只有一个;size=字符串,则您的正则表达式中不需要/g。否则,正如其他人所指出的那样,您不是在阅读文件列表或阅读每个文件,也不是真正做您打算做的任何事情。 :-) -
@mwp:鉴于 OP 的代码根本不做任何文件 IO,我认为你的 cmets 是多余的