-2

次のコードがあります

#!C:\Perl64\bin -w
#use strict; use warnings;
init_words();
print "What is your name Mr. \n";
$name = <STDIN>;
chomp ($name);
if ($name =~ /^randal\b/i){
    print "Hello, Randal, How are you doing \n";
} else {
   print "Hello, $name!\n";
   print "Tell the secret word\n";
   $guess = <STDIN>;
   chomp ($guess);
   while (!good_word ($name,$guess)) {
       print "Wrong, please try again\n";
       $guess = <STDIN>;
       chomp ($guess);
   }
}

sub init_words {
    open (WORDSLIST, "wordslist.txt") || die "can't open wordslist: $!";
$k = 1;
$a = 0;
$b = 0;
while (defined ($name = <WORDSLIST>)) {
    if ($k % 2 == 0) { 
        chomp ($name);
        $words1[$a] = $name;
        ++$k;
        ++$a; 
    } else {
        chomp ($name);
        $words2[$b] = $name;
        ++$k;
        ++$b;
    }
}

close (WORDSLIST) || die "couldn't close wordlist: $!";
}

sub good_word {
    my ($somename, $someguess) = @_;
    $somename =~ s/\W.*//;
    $somename =~ tr/A-Z/a-z/;
    if ($somename eq "randal") { 
         return 1;
    } else {
        #$n = 0;
        #words1 has secret words.
        #words2 has names.
        $t = scalar @words1;
        $u = scalar @words2;
        print "the words1 array is @words1 \n";
        print "the words2 array is @words2 \n";
        for ($d = 0; $d < $u; $d++) {
            #print "currently name in array is @words2[$d]\n";
            print "The value of somename is $somename \n";
            $delta = $words2[$d];
            print "The value of delta is $delta";
            #use strict; use warnings;
            if ($delta eq '$somename') {
                 print "test";
                 return 1;
            } 
       }
       #print "The final value of d is $d";
       #print " The final value of array is @words1[$d]";
       #if ("groucho" eq $someguess) {
       #return 1;}
       #else{
       #while ($n < $t){
       #if (@words1[$n] eq $someguess) {
       #return 1;}
       #else { ++$n};
    }

コードの主な目的は、wordslist を定義することです。コードは、単語リストを と の 2 つのサブリストに分割する必要が@words1あり@words2ます。ユーザーは名前と秘密の推測を求められます。コードは @words2 内の名前をチェックし、一致が見つかった場合はプログラムを終了します (印刷テストあり)。何らかの理由で、期待どおりに動作していません。私はいくつかの基本的なデバッグを試してみましたが、すべて問題ないように見えますが、関数 good_word では、 for ループの下の if ステートメントは決して true を返しませんが、私のデバッグでは両方$somenameと $delta が同じであることがわかります。助言がありますか??

4

1 に答える 1