我似乎无法找到为什么我的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,$_)
}
}
}
}
始终在第25行运行if
语句。我正在尝试创建if
语句,以便只有guess
位于word
时才会运行1} >
任何人都有任何关于为什么会发生这种情况以及如何阻止它的信息?
感谢。
答案 0 :(得分:4)
将其更改为:
if ($guess eq $_)
在perl中,==
代表数字,eq
代表字符串。如果您为==
提供字符串,则会将其转换为数字,然后转换为0
。
您应该启用警告,然后它会警告您发生了这种情况。
下一行也有问题:
$chars[$_]=$guess;
数组索引必须是正整数,但$_
是一个字符串(正确猜测的字符)。我不确定你在这里要做什么 - 你应该向用户显示匹配。
答案 1 :(得分:-1)
正如你在问题中所说的
我正在尝试创建一个if语句,以便只有在 guess 时才会运行 in word ,
你应该用regexp查看。
因此,您的if
条件应为
if($_ =~ /\Q$guess\E/i)