1

我正在学习 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();
    }

} 

}

好吧,看来我的问题确实与+>>有关。我正在尝试添加到文件中,但我希望能够写入,而不仅仅是追加。我将其更改为 +< 并且一切正常。谢谢你们,我真的很感激!

4

4 回答 4

3

我似乎使用错误的语法打开文件进行阅读。尝试

use autodie qw(:all);
open my $FILE, '<', '/path/to/file';

您使用的语法会打开一个文件以进行附加。

于 2012-06-15T22:33:14.087 回答
3

您的主要问题是您为 选择了一种神秘的打开模式userinfo.txt,这将允许您打开现有文件进行读写,但如果它不存在则创建一个新文件。

您必须始终检查文件打开是否成功,并且看起来您想要做的只是从该文件中读取,所以您想要

open FILE, '<', 'userinfo.txt' or die $!;

您还必须始终添加

use strict;
use warnings;

到程序的顶部,并my在第一个使用点声明所有变量。

进行这些更改后,您很可能会了解自己出了什么问题,但是如果您还有其他问题,请发布修改后的代码。

于 2012-06-15T22:34:02.840 回答
0

以下内容表示您正在阅读文件并且尚未到达文件末尾:

while (<FILE>) {
   ...
}

您可能希望完全删除 while 循环,并在其中执行所有操作。


编辑/替代解决方案:

没有发生任何事情的真正原因是,当您使用 时+>>,它会按照您的预期打开文件以供读取/追加,但它会立即将光标设置在文件末尾。这样当你遇到的while (<FILE>) { ... }时候就没有什么可读的了。

一种解决方案是重置文件光标位置:

open FILE, '+>>userinfo.txt';
seek(FILE,0,0);                 # set the file cursor at the top
于 2012-06-15T22:23:39.763 回答
0

为什么要以+>>模式打开文件?该模式打开您的文件进行输入和输出,但将文件句柄光标设置为文件末尾。即使是经验丰富的 Perl 程序员也很少需要这样做。

由于文件句柄在您打开文件时位于文件的末尾,因此当您尝试从中读取时将不会得到任何东西。

你有理由不只是说open FILE, '<', 'userinfo.txt'吗?

于 2012-06-15T22:35:15.790 回答