我正在学习Perl,并且已经查找了这个问题,但是虽然它没有错误地终止,但仍未能让它为我工作。
我输入了一个它应该想要的文件(name-0-0-0
),但它只是完全跳过while
循环。
open FILE, '+>>userinfo.txt';
print("What is your name?");
$name = <>;
chomp $name;
while (<FILE>) {
chomp;
($nameRead,$wins, $losses, $cats) = split("-");
if ($nameRead eq $name){
print("Oh hello $name, your current record is $wins wins - $losses losses - $cats ties");
print("Would you like to play again? type y for yes or n for no\n");
$bool = <>;
if ($bool == "y"){
print("Okay let's play!");
play();
exit();
}
else {
printf("well fine goodbye!");
exit();
}
}
}
好吧看来我的问题确实与+&gt;&gt;有关。我试图添加到文件,但我想能够写,而不仅仅是追加。我把它改为+&lt;一切都很好。谢谢你们,我真的很感激!
答案 0 :(得分:3)
我看起来像是您使用错误的语法打开文件进行阅读。尝试
use autodie qw(:all);
open my $FILE, '<', '/path/to/file';
您正在使用的语法会打开一个文件以便追加。
答案 1 :(得分:3)
您的主要问题是您为userinfo.txt
选择了一个神秘的开放模式,这将允许您打开现有文件进行读取和写入,但如果不存在则创建一个新文件。
您必须始终检查文件打开是否成功,看起来您想要做的就是从这个文件中读取,所以你想要
open FILE, '<', 'userinfo.txt' or die $!;
您还必须始终添加
use strict;
use warnings;
到程序的顶部,并在第一个使用点声明所有变量my
。
完成这些更改后,您很可能会了解自己出了什么问题,但如果您有其他问题,请发布修改后的代码。
答案 2 :(得分:0)
以下说明当您正在阅读文件但尚未到达文件末尾时:
while (<FILE>) {
...
}
您可能希望完全删除while循环,只需执行其中的所有操作。
没有发生任何事情的真正原因是因为当您使用+>>
时,它会按照您的预期打开文件以进行读取/追加,但它会立即将光标设置在文件的末尾。因此,当您遇到while (<FILE>) { ... }
时,无需阅读。
一种解决方案是重置文件光标位置:
open FILE, '+>>userinfo.txt';
seek(FILE,0,0); # set the file cursor at the top
答案 3 :(得分:0)
为什么要以+>>
模式打开文件?该模式打开文件以进行输入和输出,但将文件句柄光标设置为文件末尾。即使是经验丰富的Perl程序员也很少需要这样做。
由于文件句柄在您打开时位于文件的末尾,因此当您尝试从中读取时,您将无法获得任何内容。
你有没有理由说open FILE, '<', 'userinfo.txt'
?