Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Помогите разобраться с кодом
Vadik(R)
Вставить ник
сообщение 9:02:2008, 13:48
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 122
Регистрация: 12:12:2007
Из: Волгоград
Пользователь №: 14 203
Специализация: Программист, знаю HTML, JS, CSS, Паскаль.



Репутация: - 2 +


Изучаю 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++;};.
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 1)
Vovochka
Вставить ник
сообщение 10:02:2008, 23:17
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 198
Регистрация: 4:08:2006
Из: Vladivostok.pm
Пользователь №: 5 749
Специализация: Perl, Web



Репутация: - 4 +


По пункту 1.
Перед закрытие блока точку с запятой ставить не обязательно.
По пункту 2.
bla_bla_bla unless $bool; действительно имеет такое же значение как и bla_bla_bla if !$bool;
Подняться вверх 
 
Сообщение #2


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 17:05:2008 - 11:39
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net