【发布时间】:2016-10-26 16:57:24
【问题描述】:
我想比较脚本中两个文件的内容。为此,我将文件加载到数组中。第一个文件包含我在第二个文件中搜索的唯一名称。问题与比较无关,但是我必须将结果保存到文件中,该文件的名称包含来自@unique_names 数组的值。比较后我在创建文件的行中出现错误。
$file_name 内容示例:PT_FCT_Sales_20161003.out 和 print $outputFolder . $ file_name 的结果是 c:\Strawberry\PT_FCT_Sales_20161003.out
foreach my $file (@Files){
if ($file =~ /out$/i){
if ($file =~ /PT_FCT_Sales_/i){
open(my $INFILE, "<", $file) or die $!;
@lines = <$INFILE>;
foreach (my $i = 0; $i < @unique_names; $i++) {
my $file_name = join('', @unique_names[$i]);
#print $file_name;
my @data;
foreach $line (@lines) {
if ($line =~ @unique_names[$i] ) {
push (@data, $line);
}
}
open(my $OUTFILE, ">>", $outputFolder . $file_name) or die $!; #error appears here
print $OUTFILE @data;
close $OUTFILE;
}
close $INFILE or die "Can't close input file";
}
}
}
编辑:错误说:test.pl 第 71 行第 6 行的参数无效。 请注意,这不是完整的脚本,只是与问题相关的中断。
【问题讨论】:
-
我完全不清楚问题的描述。你遇到了什么错误?另外,please
use warnings;(和use strict;)—— 使用它会警告您不要使用 slice@unique_names[$i],它应该是标量$unique_names[$i]. -
为什么要在 if 语句中执行 if 语句,然后再为之前执行 foreach 的同一数组执行 foreach?您正在创建不必要的循环。
$outputfolder只使用一次?@uniquenames[$i] can be written as$uniquenames[$I]` @files 只使用了一次,脚本的其余部分在哪里? -
@zdim 我正在使用
strict和warnings,但我忽略了警告。改正后还是不行。请阅读我的帖子的更新 -
好吧——这不是原因。但是请使用
$array[$i],我不知道有什么理由不这样做。 -
再一次,我们怎么知道第 71 行在哪里?脚本的其余部分在哪里?或者至少指出第 71 行在哪里。
标签: perl