【发布时间】:2014-02-15 10:59:40
【问题描述】:
我相信有人对以下脚本发生的事情有解释:
请注意,我指定的文件可用并且正在打开。我知道这是因为程序运行时会输出文件的最后一行,但它只是最后一行。
关于 .csv 文件的注意事项:它是在 Windows 上生成的(我使用的是 OS X 10.7.4 和 Perl 5.12.3)并使用 \r 换行符。我试图告诉 perl 换行符是脚本顶部的 \r ,但它不起作用。我知道他们是\r,因为 grep 搜索在文本编辑器中找到了他们。
脚本运行并且只打印文件的最后一行。如果我插入一个正则表达式,它将从第一行抓取第一个匹配字段并很好地回显它,但我无法遍历整个文件。
感谢任何澄清,因为我是 perl 的新手。
#!/usr/bin/perl
use warnings;
print "Please enter your filename:";
my ($dataline);
open(INFO,'./expensereport.csv') || die("can't open datafile: $!");
while (my $line = <INFO>) {
chomp $line;
print $line;
}
print $!;
【问题讨论】:
-
在windows换行符是两个字符
\r\n。 -
@n0rd 和 chomp 只删除其中一个。对于 Windows,我使用
s/[\r\n]*$// -
chomp删除指定为换行符的任何内容($/变量)。默认情况下,在 OS X 上,我猜它设置为不同于\r\n。