Perl замена специальных символов - PullRequest
1 голос
/ 06 января 2020

Я хотел заменить "_" на правильную угаданную букву в программе Hangman Perl, которую я создавал. Я перепробовал много уроков. Он ломал исходную строку различными способами, например, чтобы вся строка исчезла или половина исчезла.

Основной код очень длинный, поэтому я буду выполнять только ту часть, которая у меня есть проблема с.

my $old = '_ _ _'; # Gives player sense of how many letters the word is
my $correctGuess = "a"; # Correct guess
my $new = $old =~ s/_/$correctGuess/r; # Replaces the letter
print($old, "\n"); # Prints old
print($new); # Prints new string

Как видите, правильное предположение - a. На самом деле это не тот код, который я использую, так как у меня есть оператор if и if, который его проверяет. Однако он заменяет первый «». Как мне указать, какой "" заменить? Спасибо.

1 Ответ

1 голос
/ 06 января 2020

Один из подходов - начать с секретного слова и заменить неугаданные буквы на _.

my $secret = "Just another Perl hacker";

my %guesses;
my $num_guesses = 0;
while (1) {
   my $public = $secret =~ s/([a-zA-Z])/ $guesses{uc($1)} ? $1 : "_" /erg;

   say $public;

   if ($public !~ /_/) {
      say "Success after $num_guesses guesses!";
      last;
   }

   # TODO: Check against maximum number of guesses allowed here.

   my @gueses = sort keys %guesses;
   # TODO: Display previous guesses and the number of remaining guesses.

   # TODO: Display prompt here.
   my $letter = ...;
   if ($letter !~ /^[a-zA-Z]\z/) {
      warn("Not a letter!\n");
      next;
   }

   my $uc_letter = uc($letter);

   if ($guesses{$uc_letter}) {
      warn("Already guessed \"$uc_letter\"!\n");
      next;
   }

   ++$guesses{$uc_letter};
   ++$num_guesses;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...