我想从文件中读取一些数字到数组中,然后将它们作为语句的一部分打印出来。但我得到了一些奇怪的结果。文件list1.txt
包含以下文本:
01
02
15
30
43
75
76
我想打印:
The number is: 01;
The number is: 02;
The number is: 15;
The number is: 30;
The number is: 43;
The number is: 75;
The number is: 76;
所以我编写了以下简单程序:
my @arr;
my $i = 0;
open(my $file_fh,"<","list1.txt") or die "Could not find specified file\n";
while (<$file_fh>) {
$arr[$i] = $_;
chomp($arr[$i]);
$i++;
}
foreach my $num (@arr) {
my $stmt = "The number is: ".$num."\;";
print "$stmt\n";
}
但我得到的结果是:
;he number is: 01
;he number is: 02
;he number is: 15
;he number is: 30
;he number is: 43
;he number is: 75
;he number is: 76
我做错了什么?
答案 0 :(得分:8)
您正在阅读的文件采用Windows格式,每行末尾都有CRLF
。您的cygwin Perl配置为使用Linux行结尾,因此chomp
仅删除结尾LF
,使字符串值保留为尾随CR
,这会导致分号覆盖输出的第一个字符。
答案 1 :(得分:2)
您正在使用unix(cygwin)系统上的Perl读取Windows文本文件(CRLF行结尾)。 Unix系统希望文本文件具有LF结尾。
修复方法是使用s/\s+\z//
代替chomp
。