Поскольку Perl имеет почти все "тайные" части из других списков, я скажу Вам одну вещь, что Perl не может:
Одна вещь, которую не может сделать Perl, имеют пустые произвольные URL в Вашем коде, потому что //
оператор используется для регулярных выражений.
На всякий случай для Вас не было очевидно, какие предложения функций Perl, вот выборочный список, возможно, не полностью очевидных записей:
Устройство вареного пудинга - в Perl
Мобильность и стандартность - Там вероятны больше компьютеров с Perl, чем с компилятором C
Класс управления файлом/путем - Работы File::Find над еще большим количеством операционных систем, чем .NET
Кавычки для пробела разграничили списки и строки - Perl позволяет Вам выбирать почти произвольные кавычки для своего списка и строковых разделителей
Пространства имен Aliasable - Perl имеет их через присвоения шарика:
*My::Namespace:: = \%Your::Namespace
Статические инициализаторы - Perl может выполнить код почти в каждой фазе компиляции и возразить инстанцированию, от BEGIN
(кодируйте синтаксический анализ) к CHECK
(после того, как кодируйте синтаксический анализ) к import
(в импорте модуля) к new
(возразите инстанцированию) к DESTROY
(возразите разрушению) к END
(выход программы)
Функции являются гражданами Первого класса - точно так же, как в Perl
Область действия блока и закрытие - Perl имеют обоих
Вызывающие методы и средства доступа косвенно через переменную - Perl делают это также:
my $method = 'foo';
my $obj = My::Class->new();
$obj->$method( 'baz' ); # calls $obj->foo( 'baz' )
Определение методов через код - Perl позволяет это также:
*foo = sub { print "Hello world" };
Распространяющаяся онлайн-документация - Документация Perl онлайн и вероятна в Вашей системе также
Волшебные методы, которые называют каждый раз, когда Вы вызываете "несуществующую" функцию - реализации Perl, которые в АВТОЗАГРУЗКЕ функционируют
Символьные ссылки - Вам целесообразно избегать их. Они съедят Ваши дочерние элементы. Но конечно, Perl позволяет Вам предлагать своих детей кровожадным демонам.
Один свопинг значения строки - Perl позволяет присвоение списка
Способность заменить даже ядро функционирует с Вашей собственной функциональностью
use subs 'unlink';
sub unlink { print 'No.' }
или
BEGIN{
*CORE::GLOBAL::unlink = sub {print 'no'}
};
unlink($_) for @ARGV
>>> a = [1,2,3,4,5]
>>> a.append(a.pop(0))
>>> a
[2, 3, 4, 5, 1]
Однако это дорого, так как необходимо сдвинуть содержимое всего списка, то есть O (n). Лучшим выбором может быть использование collections.deque
, если он доступен в вашей версии Python, что позволяет вставлять и удалять объекты с любого конца примерно за время O (1):
>>> a = collections.deque([1,2,3,4,5])
>>> a
deque([1, 2, 3, 4, 5])
>>> a.rotate(-1)
>>> a
deque([2, 3, 4, 5, 1])
Обратите внимание также что оба эти решения включают изменение исходного объекта последовательности, тогда как ваше создает новый список и назначает его a
. Итак, если бы мы сделали:
>>> c = a
>>> # rotate a
С вашим методом c
будет по-прежнему ссылаться на исходный неповоротный список, а в моих методах он будет ссылаться на обновленный, повернутый список /deque.