Эта подборка наглядно демонстрирует, как в Perl одна-две строчки кода могут сделать больше, чем десять строк в каком-нибудь другом языке программирования.
1. Проверить, существует ли элемент (первый аргумент функции, передается по значению) в массиве (второй аргумент функции, передается по ссылке).
sub inarr { grep {$_ == $_[0]} @{$_[1]}; } 2. Удалить из массива @arr элементы, которые есть в массиве @skip.
my @rslt = grep { my $t = $_; ! grep { $_ == $t } @skip; } @arr; 3. Скрипт замены строк в тексте
#!/usr/bin/perl while(<>) { chomp; last if($_ eq "==end=="); /^([^=]*)=(.*)$/ and $r{$1} = $2; } $d = join '', <>; $d =~ s/$_/$r{$_}/g for (keys %r); print $d; 4. Вывести список имен файлов и каталогов в заданной директории, отсортированный по дате последнего доступа. Обычно глобы сортируют список по имени файлов и каталогов. Для сортировки по дате последнего изменения, заменить цифру 8 на 9.
print join "\n", sort {(stat $a)[8] <=> (stat $b)[8]} glob "./*"; 5. Удалить повторяющиеся элементы в массиве.
my %cnt; # будет содержать число повторений элементов @links = grep { ! $cnt{$_}++; } @links; 6. Перемешать элементы массива
for(0..$#links) { my $j = int rand() * scalar @links; ($links[$_], $links[$j]) = ($links[$j], $links[$_]); } 7. Выбрать случайный элемент в массиве можно как минимум двумя способами. Можно перемешать элементы, как в предыдущем примере, и выбрать нулевой, а можно в одну строчку:
$rand = $links[int rand() * scalar @links]; 8. Аналог PHP функции urlencode.
$url =~ s/([^a-zA-Z0-9\&\?\:\;\/\=\.\,\#\-\_]{1})/sprintf("%%%02x",ord($1))/eg;
8 8 8
| |