На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Внимательно изучите правила раздела перед созданием темы
0. ПРИЛАГАЙТЕ СВОИ СКРИПТЫ.
1. Прежде чем создать топик, используйте поиск. Возможно это уже обсуждалось.
2. В топике указывайте ОС, режим работы скрипта (CLI|CGI). Очень желателен вывод лог-файлов и того места, куда у вас назначен вывод данных (STDOUT|STDERR)
3. Помните: вы знаете что вы хотите, а форумчане - нет. Поэтому следуйте простому правилу: грамотный развернутый вопрос - грамотный развернутый ответ.
Модераторы: ANDLL
  
    > Пара вопросов по Perl'у
      Подскажите, плиз...

      [*] Как всобачить в Perl'е continue в цикл do while ?
      Я могу сделать так:
      ExpandedWrap disabled
        $x = 5;<br>while ($x--)<br>{<br>  print $x<br>} continue { print '.' };

      а vot так - нет:
      ExpandedWrap disabled
        $x = 5;<br>do<br>{<br>  print $x<br>} while ($x--) continue { print '.' };


      [*] Что-то я не совсем понимаю, как работает блок:
      ExpandedWrap disabled
        @list = sort({$a <=> $b} (2,1,10));         # @list 1,2,10<br>@list = sort({$b <=> $a} (2,1,10));         # @list 10,2,1

      Почему в первом случае список сортируется по возрастанию, а во втором - по убыванию? И что здесь $a и $b (ведь они нигде не объявлены!)?

      [*] Почему код...
      ExpandedWrap disabled
        $ages{'Fred'} = 35;<br>$ages{'Bob'} = 25;<br>$ages{'Mary'} = 30;<br>$ages{'Zack'} = 15;<br>@list = keys(\%ages);<br>print "@list\n";
      ...выдаёт 'Zack Mary Fred Bob'.
      Почему именно в таком порядке?
        Цитата Jin X, 03.03.03, 18:09:28
        Я могу сделать так:
        ExpandedWrap disabled
          $x = 5;<br>while ($x--)<br>{<br>  print $x<br>} continue { print '.' };

        а vot так - нет:
        ExpandedWrap disabled
          $x = 5;<br>do<br>{<br>  print $x<br>} while ($x--) continue { print '.' };

        Патаму чта у DO нету оператора континью.

        Цитата
        как работает блок:
        ExpandedWrap disabled
          @list = sort({$a <=> $b} (2,1,10));         # @list 1,2,10<br>@list = sort({$b <=> $a} (2,1,10));         # @list 10,2,1

        Почему в первом случае список сортируется по возрастанию, а во втором - по убыванию? И что здесь $a и $b (ведь они нигде не объявлены!)?

        Сортировка ведется парами значений:
        первое выбранное значение (левое) обозначается $a, а второе (правое) - $b
        Таким образом, это означает _правило_ сравнения пар значений:
        как бы "если первое больше второго".
        Если переставить правило местами - то "если первое меньше второго".

        Цитата

        [*] Почему код...
        ExpandedWrap disabled
          $ages{'Fred'} = 35;<br>$ages{'Bob'} = 25;<br>$ages{'Mary'} = 30;<br>$ages{'Zack'} = 15;<br>@list = keys(\%ages);<br>print "@list\n";
        ...выдаёт 'Zack Mary Fred Bob'.
        Почему именно в таком порядке?

        Потому, что сортировка производится по возрастанию по значению возраста,
        а не по алфавиту. В списке @list лежат _возраста_, а не имена.

          Ясно. Спасибо!

          По поводу последнего: почему же тогда, если сделать $ages{'Fred'} = 20; , то ничего не меняется, а если Fred заменить на Freddy, то последние два меняются местами?
            Пардон... Был неправ...
            в последнем примере вообще нет никакой сортировки!
            Поэтому список выдается в том виде, в каком перл разместил их _сам_ в памяти.
            И в @list хранятся именно ИМЕНА!
            Если Фреда поменять на Фредди, то Перл у себя в памяти размещает их как-то по-другому, потому что длина одного из ключей изменилась.
            Сообщение отредактировано: vot -
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0237 ]   [ 15 queries used ]   [ Generated: 27.04.24, 06:22 GMT ]