Помогите разобраться с кодом

Тема в разделе "Perl программирование", создана пользователем Vadik(R), 9 фев 2008.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Изучаю Perl по саоучителю Клинтона Пирса - Освой Perl за 24 часа. Сегодня был на 4 часу. Объяснялось про массивы. И в качестве применения всего нового изученного, автор дает программу:
    Код (Text):
    #!/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++;};.
     
  2. Vovochka

    Vovochka Гость

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

Поделиться этой страницей