perl5100delta(4) - DOES(), pack, unpack, разное

UNIVERSAL::DOES()

В классе UNIVERSAL появился новый метод DOES(). Он был добавлен для решения семантической проблемы с методом isa(). isa() проверяет наследование, тогда как DOES() разработан для его замещения, что позволяет авторам модулей использовать другие типы отношений между классами (в добавок к наследованию). (chromatic)

Подробнее об этом в разделе Метод "$obj->DOES( ROLE )" в классе UNIVERSAL.

Форматы

Форматы улучшены несколькими способами. Новый тип поля - ^* может быть использован для каждой строки текста переменной ширины. Нулевые символы в строке шаблона обрабатываются корректно. Совместное использование @# и ~~ вместе будет приводить к возникновению ошибки времени компиляции, так как указанные форматы полей несовместимы. Расширен документ perlform, исправлены различные недоработки.

Модификаторы pack() и unpack()

Два новых модификатора порядка байтов, >-(тупоконечный(big-endian) модификатор) и < - ("остроконечный"(little-endian) модификатор), которые могут быть использованы в шаблонах pack() и unpack() для принудительного определения порядка байтов. См. "pack" in perlfunc и perlpacktut.

no VERSION

Теперь можно использовать no с указанием номера версии perl, что будет означать, что можно использовать старшие версии perl.

    use 5.10.0; # выполняемая версия perl не ниже 5.10.0
    no 5.10.0;  # разрешено выполнение на perl старше 5.10.0

chdir, chmod и chown для дескрипторов файлов

chdir, chmod и chown можно использовать с дескрипторами файлов так же как и с именами файлов, если система поддерживает соответственно fchdir, fchmod и fchown. Эта возможность включена благодаря патчу, предоставленному Gigle Aas.

Группы процессов в ОС

$( и $) теперь возвращают группы процессов в том порядке, в котором их возвращает операционная система. Эта стало возможным благодаря Gigle Aas.

Рекурсия в sort()

Вы теперь можете использовать рекурсивный вызов подпрограмм в функции sort(), благодаря Robin Houston.

Исключения в свертывании констант

Процедура свертывания констант теперь завернута в обработчике исключений, и если свертывание констант вызывает исключительную ситуацию (например в результате попытки деления на ноль), perl сохраняет текущий опкод , а не прерывает всю программу. (Nicholas Clark, Dave Mitchell)

Фильтры исходного кода в @INC

Это реализовано для совершенствования механизма подпрограмм-обработчиков в @INC, добавлением фильтра исходного кода в начале открытого дескриптора возвращаемого обработчиком.

    push @INC, \&my_sub;

    sub my_sub {
       my ($coderef, $filename) = @_; # $coderef is \&my_sub
       ...
    }

Эта особенность планировалось давно, и оно до сих пор не полностью реализовано. См. "require" in perlfunc (Nicholas Clark)

Новые внутренние переменные

  • ${^RE_DEBUG_FLAGS}

    Эта переменная контролирует, чтобы флаги отладки были в силе для машины регулярных выражений во время исполнения при использовании use re "debug". См. re.

  • ${^CHILD_ERROR_NATIVE}

    Эта переменная сохраняет неизменный статус возвращенный последним закрытым каналом, оператором ввода команд (``), успешного вызова wait() или waitpid(), или функции system(). См. perlrun. (Предоставил Gisle Aas)

  • ${^RE_TRIE_MAXBUF}

    См. Оптимизация чередования строк .

  • ${^WIN32_SLOPPY_STAT}

    См. Функция стат в Windows .

Разное

unpack() теперь по умолчанию распаковывает содержимое переменной $_.

mkdir() без агрументов по умолчанию работает с $_.

Внутренний дамп вывода был усовершенствован, так что непечатаемые символы такие как символ новой строки "\n" и символ забоя(backspace) "\b" выводятся в в нотации \x, вместо восьмеричного числа.

Опция -C больше не может использоваться в строке #!. Она там не воспринимается в любом случае, посколько стандартные потоки уже настроены на точку исполнения perl интерпретатора. Вместо этого вы можете использовать binmode() чтобы получить желаемое поведение.

UCD 5.0.0

Копия Базы Символов Юникода(Unicode Character Database) которая включена в поставку perl 5, обновлена до версии 5.0.0.

MAD

MAD, расшифровывается как Miscellaneous Attribute Decoration (примерный перевод на русский - Различные обозначения атрибутов. MAD пока в развитии, Perl 5 к Perl 6. Чтобы его включить, необходимо передать аргумент -Dmad при конфигурировании и сборке perl. Но это повлияет на скорость работы perl; причем он проходит не все тесты из тестового набора. (Larry Wall, Nicholas Clark).

kill() в Windows

На платформе Windows, kill(-9, $pid) теперь убивает дерево процессов. (На UNIX, он доставляет сигнал всем процессам указаной группы процессов.

Statistic

About this Entry

This page contains a single entry by Dinar published on March 19, 2010 2:18 AM.

perl5100delta (3) was the previous entry in this blog.

perl5100delta - Несовместимые изменения (1) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.