2014-04-18 42 views
1

我必须读取perl脚本中的文件。我已经做了什么,我已经找到了大部分的资源都告诉我这样做,但我仍然得到同样的错误,这里是我的代码:无法打开文件在perl中读取

print "Input file name: "; 
$file = <>; 
open($fileHandle, "<", $file) or die "cannot open < $file: $!"; 

结果:

cannot open < scores.dat 
: No such file or directory at ./project5.pl line 6, <> line 1. 

这样做我每次都得到错误。任何想法,我是新来的Perl,所以我准备犯一个愚蠢的错误,但是,是的,scores.dat确实存在。

+1

仅供参考:http://perldoc.perl.org/functions/chomp.html – chilemagic

回答

4

您似乎正在阅读行尾字符,而不是从包含文件名的变量中删除它(当它打印消息以表明文件不存在时,文件名之间会出现换行符和冒号“:”)。获取文件名后,添加下面的行:

chomp $file; 

这将删除字符串末尾的换行符。

不要混淆chompchop(后者删除字符串的最后一个字符,不管它是什么)。

编辑:感谢ThisSuitIsBlackNot捕捉我的错字。

1

您必须从$file中存储的用户输入中删除行尾字符。

您可以用替代手动执行此操作:

$file = <>; 
$file =~ s/\n$//; 

或者更好,使用格格:

$file = <>; 
chomp($file); 

在不同的音符,你的“scores.dat”文件已存在相对于您当前的脚本。如果它位于另一个目录中,请确保您使用的是相对路径,或将目录路径追加到您的$file

+0

应该是“相对于当前目录”。 Perl脚本的位置是不相关的。 – justintime

+0

注意到...谢谢 –

0

同意与其他答案,使用

chomp $file; 

,以帮助检测用它

open my $fileHandle, "<", $file or die "cannot open '$file': $!"; 

然后(在未来的空间或可能)流氓换行会更明显。