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

なぜファイルを+>>モードで開いているのですか?このモードでは、ファイルを入出力用に開きますが、ファイルハンドルカーソルをファイルの最後に設定します。経験豊富なPerlプログラマーでさえ、そうする必要はめったにありません。

ファイルハンドルは、開いたときにファイルの最後に配置されているため、ファイルから読み取ろうとしても何も取得されません。

あなたが言っているだけではない理由はありますopen FILE, '<', 'userinfo.txt'か?

于 2012-06-15T22:35:15.790 に答える
0

ファイルを読んでいて、ファイルの終わりに達していないときに、次のように言います。

while (<FILE>) {
   ...
}

while ループを完全に削除して、その中のすべてを実行したい場合があります。


編集/代替ソリューション:

何も起こらなかった本当の理由は、を使用する+>>と、期待どおりに読み取り/追加用にファイルが開かれるためですが、すぐにカーソルがファイルの最後に設定されるためです。そのため、 に遭遇したときwhile (<FILE>) { ... }に読むものは何もありません。

1 つの解決策は、ファイル カーソルの位置をリセットすることです。

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