|
10 полезных опций для написания однострочников на языке Perl (доп. ссылка 1) |
[комментарии]
|
| В простейших случаях perl можно использовать в командной строке как замену grep и sed, например:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Замена установленного вручную perl-модуля на версию из пакета (доп. ссылка 1) |
[комментарии]
|
| Иногда требуется заменить ранее вручную установленный perl-модуль на его вариант, появившийся в составе дистрибутива (Ubuntu/Debian).
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как в Debian/Ubuntu установить отсутствующий в репозитории Perl модуль |
[комментарии]
|
| В случае отсутствия определенного Perl модуля в стандартных репозиториях Debian
и Ubuntu, можно поставить модуль через задействования механизмов установки
модулей CPAN, но такие модули не впишутся в пакетную инфраструктуру
дистрибутива. Поэтому для установки нестандартных Perl модулей следует
использовать dh-make-perl.
Ставим пакет dh-make-perl:
apt-get install dh-make-perl
Устанавливаем нужный Perl модуль (в примере Module::Name) из репозитория CPAN:
dh-make-perl --cpan Module::Name --install
Например:
dh-make-perl --cpan HTML::CTPP2 --install
Утилита dh-make-perl сама загрузит нужный модуль, соберет его, оформит deb-пакет и установит его.
Если модуль не из CPAN, можно распаковать модуль и выполнить (--build -
сформировать пакет, но не устанавливать):
dh-make-perl директория_с_модулем --build
|
|
|
|
|
Как выделить цветом определенное слово, используя "tail -f" (доп. ссылка 1) |
[комментарии]
|
| Пример, выделения слова Reject при просмотре хвоста почтового лога:
tail -f /var/log/maillog |perl -p -e 's/Reject/\033\[46;1mReject\033[0m/gi;'
Если нужно не только выделять цветом, но и подавать звуковой сигнал при появлении [email protected]:
tail -f /var/log/maillog |perl -p -e 's/(test\@test.ru)/\033\[46;1m$1\033[0m\007/gi;'
|
|
|
|
|
Кратко о безопасности в CGI скриптах на Perl |
[комментарии]
|
| - Главное правило - всегда явно проверять все переменные полученные из внешних источников
(cgi-параметры, cookie, переменные окружения, имя файла и путь (при листинге директории по readdir));
- Вырезать спецсимволы в переменных используемых в сис. функциях (open(),
system(), ``) и обращениях к sql.
вырезание: s/[^\w\d_\-.]//g или tr/;<>*|?`&$!#{}[]:'\/\n\r\0// для open(), system(), ``.
не забывать про \0 (передают %00, который воспринимается как конец стоки)
Пример: $var="../../etc/passwd|\0"; open(F, "/home/test/$var.txt")
- при открытии файла на чтение в open() всегда указывать "<$file";
- Осторожность при использовании переменной внутри eval() и regex (/\Q$var\E/
иначе можно подставить ?{код}).
- Нельзя проверять числовые параметры через "if ($var > 0)", так как может
пройти $var="123;somecode";
|
|
|
|
|
Как ограничить время выполнения Perl блока таймаутом |
[комментарии]
|
| use constant TIMEOUT => 1;
eval {
local $SIG{ALRM} = sub { die "timeout during sysread\n"; };
alarm(TIMEOUT);
$read_flag = sysread($filehandle, $c, 1);
alarm(0);
};
|
|
|
|
|
|
|
|
Генерация выполняемого perl файла из core |
[обсудить]
|
| 1.
$ /usr/bin/perl -u myprog.pl
$ undump myprog /usr/bin/perl core
2.
$ perl -MO=Bytecompile,-ofile sourcescript
undump - http://ftp.ktug.or.kr/tex-archive/support/undump/
|
|
|
|
|
Как скомпилировать Perl скрипт в бинарный вид, чтобы другие не смогли увидеть исходный текст. |
[обсудить]
|
| perlcc script.pl
Подробнее, man perlcc
Если perlcc выдаст ошибку, что невозможно найти DynaLoader.a,
впишите в начало компилируемого файла "use DynaLoader;".
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|