Для тех, кто знаком с языком Ruby, не секрет, что весь код в нем является объектом. Т.е. все переменные, строки и даже сам код — это совершенно простые объекты самого языка, к которым применимы соответствующие методы:
-199.abs # 199
"ruby is cool".length # 12
"Your mother is nice.".index("u") # 2
Круто. Давайте теперь представим, как бы все это выглядело, если бы мы пользовали perl:
abs( -199
) length( "ruby is cool" ) index( "Your mother is nice.", "u" );
Обратите внимание на вторую строчку в этом примере: Ruby по-прежнему крут :-) Но у нас тоже есть возможность использовать подобную объектную модель, в самом языке Perl. Причем, совершенно аналогичным образом.
-199->abs
"perl is cool"->length
"Your mother is nice."->index("u")
Поможет нам в этом autobox::Core.
Модуль предлагает совершенно иную структуру кода, написанного на Perl. Отныне все скаляры, списки, хэши и даже сам код — все это является объектами соответствующих классов.
Какие же методы и как нам теперь можно использовать? Давайте разбираться по-порядку.
МАССИВЫ:
my @ary = (1..10);say @ary->pop # последний элемент массива
say @ary->shift # первый элемент массива
@ary->push( 11 ) # добавить элемент в массив
say @ary->elems # кол-во элементов (из perl6)
say @ary->last # последний элемент списка (из perl6)
say @ary->sum # сумма элементов массива
say @ary->join( ' - ' ) # превратить массив в строку "1 - 2 - 3 .. - 10"
Вложенные функции теперь можно представить в виде цепочки методов:
@ary->join( ' - ' )->say
Работа с указателями совершенно идентична:
my $ary = [1..10];
$aty->elems->say
Массивы могут перебираться внутри цикла таким образом:
@ary->foreach( sub { say $_[0] } );
ХЭШИ:
my %hash = ( a => 1, b => 2, c => 3 );%hash->keys # все ключи хэша
%hash->values # все значения хэша
%hash->delete( 'a' ) # удалить значение
%hash->exists( 'a' ) # проверить существование значения
Точно так же, как и массив, можно перебрать и хэш:
%hash->each(sub { print $_[0], ' is ', $_[1], "\n" });
Ну и напоследок про хэши:
%hash->keys->sort->reverse->print; # вывести ключи хэша, отсортированные в обратном # порядке.
СПИСКИ:
В большинстве случаев к спискам применимы те же методы, что и к массивам:
[1, 2, 3, 4, 5]->elems->say;
СКАЛЯРЫ:
Скаляры — это строки, числа и символы. Функций для работы со скалярами довольно много, я покажу несколько примеров.
my $scalar = "10 20 30 40"; my @ary = $scalar->split(qr{ })->elements;
# превратить строку в массив
$scalar->strip # удалить пробелы в начале и конце
16->sqrt # квадратный корень
"hello"->uc # все буквы сделать строчными (рез.: HELLO)
"HELLO"->lc # все буквы сделать прописными (рез.: hello)
Числовые функции:
add, and, band, bor, bxor, cmp, dec, div, eq, flip, ge, gt, inc, le, lshift, lt, mod, mult, mcmp, ne, neg, meq, mge, mgt, mle, mlt, mne, not, or, pow, rpt, rshift, sub, xor.
Последнее
Чтобы эту красоту использовать, нужен модуль autobox::Core. Делаем так:
$ sudo cpan autobox::Core
Все.