我正在尝试使用 Perl(为 x86_64-linux 构建的 v5.10.1)解析一个文件,该文件包含如下三行的信息 block :
Header1,Header2,Header3,Header4,Header5,Header6,Header7,Header8,Header9
Slot11,Slot12,Slot13,Slot14,Slot15,Slot16,Slot17,Slot18,Slot19
Slot21,
Slot31,
Slot11,Slot12,Slot13,Slot14,Slot15,Slot16,Slot17,Slot18,Slot19
Slot21,
Slot31,
Slot11,Slot12,Slot13,Slot14,Slot15,Slot16,Slot17,Slot18,Slot19
Slot21,
Slot31,
and so on....
现在,我有了 Perl 脚本,可以每行加载文件行
my @lines;
while (<$INPUT>) {
chomp;
push @lines, $_;
}
然后我处理它...
for (my $i = 1; $i <= $#lines; $i+=3) { ###skip the header line
chomp $lines[$i];
my @line = split (/\,/, $lines[$i]);
my $cl1 = $line[6]; #Load Slot17
my $cl2 = $line[7]; #Load Slot18
my $ref1 = $lines[$i + 1]; #Load Slot21
my $ref2 = $lines[$i + 2]; #Load Slot31
chomp $ref1;
chomp $ref2;
chomp $cl1;
chomp $cl2;
#######Beware, problematic line!!!!!!!!
print "$cl1\t$cl2\t$ref1\t$ref2\n";
每次运行此脚本时,输出都与我的预期完全不同。
Slot17 Slot31 Slot21
如果我更改有问题的行:
print "$cl1\n$cl2\n$ref1\n$ref2\n";
结果符合预期,即:
Slot17
Slot18
Slot21
Slot31
我还在问题行之前调试了脚本并逐个打印变量,一切正常。问题似乎出在打印线上,但我对导致它的原因感到非常困惑。此外,这是一个非常简单的脚本,没有太多空间用于未注意到的错误。我的计算机如何以及为什么会改变位置并消除输出中的结果?是什么导致了这种行为?
最佳答案
我怀疑您的文件包含回车符。
在输入循环中使用 s/\r//;
消除它们。
如果您遇到变量值似乎与您期望的不尽相同的问题,您可以通过执行以下操作使不可打印的字符变得明显:
use Data::Dumper;
$Data::Dumper::Useqq=1;
print Dumper $variable;
关于linux - Perl 在解析和打印文件段时正在更改和消除声明的变量?可能的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31150295/