-1

Perl ハングマン コードの理由がわかりません。

#!\usr\bin\perl
use 5.016;
&hangman;
sub hangman{
    our(@graphics,@words,$word,@chars,$hidden,$incorrect,$guess,);
    @graphics=("=========",
    "        |\n        |\n        |\n        |\n        |\n=========",
    "   ======\n        |\n        |\n        |\n        |\n        |\n=========",
    "   ======\n   |    |\n        |\n        |\n        |\n        |\n=========",
    "   ======\n   |    |\n   O    |\n        |\n        |\n        |\n=========",
    "   ======\n   |    |\n   O    |\n   |    |\n        |\n        |\n=========",
    "   ======\n   |    |\n   O    |\n  /|    |\n        |\n        |\n=========",
    "   ======\n   |    |\n   O    |\n  /|\\   |\n        |\n        |\n=========",
    "   ======\n   |    |\n   O    |\n  /|\\   |\n  /     |\n        |\n=========",
    "   ======\n   |    |\n   O    |\n  /|\\   |\n  / \\   |\n        |\n=========");
    @words=qw(ant baboon badger bat bear beaver camel cat clam cobra cougar coyote crow deer dog donkey duck eagle ferret fox frog goat goose hawk lion lizard llama mole monkey moose mouse mule newt otter owl panda parrot pigeon python rabbit ram rat raven rhino salmon seal shark sheep skunk sloth snake spider stork swan tiger toad trout turkey turtle weasel whale wolf wombat zebra);
    $word=$words[rand scalar@words];
    for(0..length$word){
        @chars=split("",$word);
    }
    $hidden="-"x length($word);
    while($incorrect<0+@graphics){
        print"Word: $hidden\nGuess a letter: ";
        chomp($guess=<STDIN>);
        foreach(@chars){
            if($guess==$_){
                    substr($hidden,$_)
            }
        }
    }
}

常に 25 行目のステートメントを実行します。次の場合にのみ実行されるようにステートメントifを作成しようとして います。 ありがとう。ifguessword

4

2 に答える 2

4

次のように変更します。

if ($guess eq $_) 

perl では、==は数値用、eqは文字列用です。文字列を に与えると==、それらは数値に変換され、 に変換され0ます。

警告を有効にする必要があります。そうすれば、これが起こっていることが警告されます。

次の行にも問題があります。

$chars[$_]=$guess;

配列インデックスは正の整数でなければなりません$_が、文字列 (正しく推測された文字) です。ここで何をしようとしているのかわからない - ユーザーに一致を表示する必要があります。

于 2013-03-08T18:58:08.243 に答える
-1

あなたが質問で言ったように

推測が 単語​​にある場合にのみ実行されるように、if ステートメントを作成しようとしています。

正規表現で確認する必要があります。

だから、あなたのif状態は

if($_ =~ /\Q$guess\E/i) 
于 2013-03-08T19:01:23.537 に答える