我必须在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的新手所以我为一个愚蠢的错误做好了准备,但是是的,得分确实存在。
答案 0 :(得分:4)
您似乎正在读取行尾字符而不是从包含文件名的变量中删除它(当它打印消息说文件不存在时,文件名和文件名之间有换行符。冒号“:”)。获取文件名后,添加以下行:
chomp $file;
这将只删除字符串末尾的换行符。
不要将chomp
与chop
混淆(后者删除字符串的最后一个字符,无论它是什么)。
编辑:感谢ThisSuitIsBlackNot
抓住我的拼写错误。
答案 1 :(得分:1)
您必须从$file
中存储的用户输入中删除行尾字符。
您可以使用替换手动执行此操作:
$file = <>;
$file =~ s/\n$//;
或者更好,使用chomp:
$file = <>;
chomp($file);
另一方面,你的&#34; scores.dat&#34;文件必须相对于当前脚本存在。如果它位于另一个目录中,请确保您使用相对路径,或将dir路径附加到$file
。
答案 2 :(得分:0)
同意其他答案,请使用
chomp $file;
要帮助检测它,请使用
open my $fileHandle, "<", $file or die "cannot open '$file': $!";
然后,流氓线路馈送(或者可能在未来的空间中)将更加明显。