Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться с кодом
Форум программистов > Интернет и сети > Web-программирование > Perl программирование
Vadik(R)
Изучаю Perl по саоучителю Клинтона Пирса - Освой Perl за 24 часа. Сегодня был на 4 часу. Объяснялось про массивы. И в качестве применения всего нового изученного, автор дает программу:
Код
#!/usr/bin/perl -w

@words=qw( Интернет Ответ Принтер Программа );
$guesses[0]="";
$wrong=0;

$choice=$words[rand @words];
$hangman="0-|--<";

@letters=split(//, $choice);
@hangman=split(//, $hangman);
@blankword=(0) x scalar(@hangman);
OUTER:
   while ($wrong<@hangman) {
      foreach $i (0..$#letters) {
              if ($blankword[$i]) {
                       print $blankword[$i];
              }  else  {
                       print "-";
              }
      }
      print "\n";
      if ($wrong) {
              print @hangman[0..$wrong-1]
      }
      print "\n Ваш выбор: ";
      $guess=<STDIN>; chomp $guess;
      foreach(@guesses) {
            next OUTER if ($_ eq $guess);
      }
      $guesses[$#guesses]=$guess;
      $right=0;
      for ($i=0; $i<@letters; $i++) {
             if ($letters[$i] eq $guess) {
                      $blankword[$i]=$guess;
                      $right=1;
              }
      }
      $wrong++ unless($right);
      if (join('', @blankword) eq $choice) {
              print "Вы угадали!\n";
              exit;
       }
}
print "$hangman\n Печально, но было загадано слово $choice.\n";

У меня два вопроса по ней:
1. Почему в строчках 23-25 не нужна точка с запятой после печати (вернее, почему её можно тут не ставить)?
2. Не врублюсь в строчку 39. Автор её описывает просто как: "Переменная $wrong увеличивается на единицу при каждом неправильном ответе пользователя.".
Но из строчки я только понял $wrong++. А что такое unless($right)? И вообще сама конструкция не понятна, там нет if'а.
P.S. Как я врубился, эту строчку можно заменить if (!$right) {$wrong++;};.
Vovochka
По пункту 1.
Перед закрытие блока точку с запятой ставить не обязательно.
По пункту 2.
bla_bla_bla unless $bool; действительно имеет такое же значение как и bla_bla_bla if !$bool;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.