-1

我似乎找不到我的 Perl Hangman 代码的原因:

#!\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,$_)
            }
        }
    }
}

始终if在第 25 行运行该语句。我正在尝试创建一个if语句,以便它仅在存在时运行guess任何word
人都知道为什么会发生这种情况以及如何阻止它?
谢谢。

4

2 回答 2

4

将其更改为:

if ($guess eq $_) 

在 perl 中,==用于数字,eq用于字符串。如果您将字符串提供给==,它会将它们转换为数字,然后将它们转换为0

您应该启用警告,然后它会警告您正在发生这种情况。

下一行也有问题:

$chars[$_]=$guess;

数组索引必须是正整数,但是$_是字符串(正确猜测的字符)。我不确定您要在这里做什么-您应该向用户显示匹配项。

于 2013-03-08T18:58:08.243 回答
-1

正如你在问题中所说

我正在尝试创建一个 if 语句,以便它仅在guess 在 word 中时运行,

你应该用正则表达式检查。

所以,你的if条件应该是

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