使用Perl从文件中读取

时间:2012-06-15 22:11:42

标签: perl

我正在学习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;一切都很好。谢谢你们,我真的很感激!

4 个答案:

答案 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'

相关问题