|
Perl функция для quoted-printable кодирования в соответствии с RFC2047 (доп. ссылка 1) |
Автор: dev
[комментарии]
|
| Популярный Perl модуль MIME::Words не обеспечивает quoted-printable кодирование
в полном соотвтетвии с RFC2047 (пробелы между двумя закодированными блоками недопустимы).
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Обработка иерархически связанной структуры на Perl
на perl. |
Автор: Andrey Karavaev
[комментарии]
|
| Как-то пришлось столкнуться с обработкой иерархически связанной структуры на perl.
В инете есть куча разрозненной информации по этому поводу.
Можно, например, воспользоваться пакетами с сайта CPAN. Но с одной
стороны
стрелять из пушки по воробьям ... не дело.. а с другой надо чтобы и в мозгах что-то осталось.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как создать лок файл на Perl |
[комментарии]
|
| Для защиты от одновременного запуска нескольких процессов, можно сделать так:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Преобразование текста из UTF-8 в KOI8-R и обратно на языке Perl |
[комментарии]
|
| Преобразование из UTF-8 в KOI8-R:
use Unicode::Map8;
use Unicode::String qw(utf8);
my $koi8 = Unicode::Map8->new("koi8-r");
$koi8_string = $koi8->to8(utf8($utf8_string)->utf16);
Обратное преобразование
use Unicode::Map8;
use Unicode::String qw(utf16);
my $koi8 = Unicode::Map8->new("koi8-r");
$utf8_string = utf16($koi8->to16($koi8_string ))->utf8;
Другой метод:
use Encode;
$koi8_text = from_to($utf8_text, "utf8", "koi8-r");
$utf8_text = from_to($koi8_text, "koi8-r", "utf8");
|
|
|
|
|
Симметричное шифрование блока данных на Perl. |
[комментарии]
|
| use Crypt::Blowfish;
use Crypt::CBC;
my $cipher = new Crypt::CBC("Секретный ключ для шифрования",'Blowfish');
my $crypted_block = $cipher->encrypt_hex($text);
my $text = $cipher->decrypt_hex($crypted_block);
$cipher->finish();
|
|
|
|
|
Установка русской локали в Perl скриптах. |
[обсудить]
|
| use POSIX qw(setlocale LC_ALL LC_CTYPE LC_NUMERIC);
use locale; # ru_RU.KOI8-R, ru_RU.CP1251, ru_RU.ISO-8859-5, ru_RU.UTF-8
my $g_setlocale_all = POSIX::setlocale( &POSIX::LC_ALL, "ru_RU.KOI8-R" );
my $g_setlocale_num = POSIX::setlocale( &POSIX::LC_NUMERIC, "C" );
|
|
|
|
|
Запуск ispell для проверки орфографии из скрипта (доп. ссылка 1) |
[обсудить]
|
| Вывести список слов с ошибками:
cat file.txt | ispell -d russian -l
Детальный разбор ошибок с вариантами замены:
echo file.txt | ispell -d russian -a
Для скриптов на perl рекомендую использовать модуль Lingua::Ispell.
|
|
|
|
|
Чем в perl лучше шифровать данные. |
[обсудить]
|
| Необратимое шифрование (хэш или fingerprint):
Модули (в порядке возрастания надежности) Digest::MD5, Digest::SHA1, Digest::HMAC_MD5, Digest::HMAC_SHA1
Пример: use Digest::SHA1 qw(sha1_base64);
$hash = sha1_base64("test");
Обратимое шифрование по ключу:
Модули: Crypt::DES, Crypt::HCE_SHA, Crypt::Blowfish + Crypt::CBC
Пример: use Crypt::Blowfish; use Crypt::CBC;
$cipher_handle = new Crypt::CBC($encrypt_key,'Blowfish');
$crypted_text = $cipher_handle->encrypt_hex($text);
$text = $cipher_handle->decrypt_hex($crypted_text);
Шифрование с использованием открытого ключа: Crypt::OpenPGP, Crypt::GPG , Crypt::PGP5.
|
|
|
|
|
Генерация случайной последовательности символов на Perl |
[обсудить]
|
| sub sys_true_rand {
my ($num_char) = @_; # Число символов в качестве параметра.
my $dev_line;
my $rand_line = "";
open(UR,"</dev/urandom") || die "Cam't open /dev/urandom"";
do {
read (UR, $dev_line, 4096);
$dev_line =~ s/[^\w\d]//g;
$rand_line .= $dev_line;
} until (length($rand_line) >= $num_char);
close(UR);
return substr($rand_line,0, $num_char);
}
|
|
|
|
|
Как используя Perl разбить число на триады |
Автор: gr
[обсудить]
|
| $num = 100000000000000;
$num =~ s/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/$1,/g;
|
|
|
|
|
Как в Perl вырезать у строки лидирующие пробелы |
[комментарии]
|
| $str =~ s/^\s*([^\s]?.*)$/$1/;
$str =~ s/^(.*[^\s])\s*$/$1/; # два regex работают быстрее, чем один более сложный
|
|
|
|
|
Как найти подстроку находящуюся в переменной с экранированием опасных символов. |
[обсудить]
|
| Для экранирования спец. символов в строке подставляемой в регуларное
выражение, строку нужно разместить между модификаторами \Q и \E,
при этом все спецсимволы не будут интерпретироваться как операторы рег. выражения.
Например: /\Q$str\E/
Или можно использовать функцию index():
$pos = index($строка, $подстрока);
if ($pos < 0){
# Подстрока не найдена.
} else {
# В $pos - позиция первой совпавшей позиции подстроки.
}
|
|
|
|
|
Как работать с параметрами передаваемыми в командной строке |
[обсудить]
|
| use Getopt::Long;
GetOptions("prefix=s", \$prefix, "prefix-man=s", \$prefix_man);
$prefix = defined($prefix) ? $prefix : $default_install_path;
$prefix_man = defined($prefix_man) ? $prefix_man : $default_install_man;
|
|
|
|
|
Как преобразовать число в определенный формат |
[обсудить]
|
| Примеры:
$a = sprintf("%4.2f",$num);
$a = sprintf("%06X%06X",$num1,$num2);
$a = sprintf("%04i",$num);
|
|
|
|
|
Обработка RSS и Atom лент на языке Perl |
[комментарии]
|
| Для обработки RSS/Atom лент удобно использовать perl модуль XML::Feed, у которого есть один неприятный недостаток - необходимость установки очень большого числа зависимостей. Для работы XML::Feed во FreeBSD нужно установить около 100 дополнительных Perl модулей, не входящих в состав Perl 5.8.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|