Данный пост является вырезкой из документации Perl6::Perl5::Differences
Встроенные функции
Некоторые встроенные функции удалены. Дополнительно см. [S29]: Устаревшие функции
Ссылки в прошлом (или все типы данных являются ссылками)
В Perl 6 захват объектов заполнил экологическую нишу ссылок. Можно представить себе, что это "толстые" ссылки, то есть ссылки, которые могут захватывать не только текущую идентичность одного объекта, но так же относительные идентичности нескольких связанных объектов. С другой стороны, можно считать, что ссылки в Perl 5 являются частной формой захвата, когда создается ссылка только на один элемент.
Было: ref $foo eq 'HASH' Стало: $foo ~~ Hash Было: @new = (ref $old eq 'ARRAY' ) ? @$old : ($old); Стало: @new = @$old; Было: %h = ( k => \@a ); Стало: %h = ( k => @a );
Передача аргумента по ссылке с последующей его модификацией:
Было: sub foo {...}; foo(\$bar) Стало: sub foo ($bar is rw); foo($bar)
В вышеприведенных примерах "устаревших" ссылок имеются некоторые нюансы. Подробнее о захватах можно узнать в документе [S02]: Имена и переменные , или на странице Perl6::FAQ::Capture.
say()
Это та же функция print с автоматическим добавлением символа новой строки:
Было: print "Hello, world!\n"; Стало: say "Hello, world!";
Так как печать с символом завершения строки используется довольно часто, было решено сделать эту возможность на уровне языка.
wantarray()
Функции wantarray() в Perl 6 нет. Контекст подпрограммы определяется за её пределами, это значит, что подпрограмма "не знает", в каком контексте она выполняется.
Вместо этого нужно возвращать объекты, которые действуют в зависимости от своего контекста. Подробнее см. [S06]: Функция want
Leave a comment