perl
Кажется, первый «родной» язык (не первый вообще, до того были кенгуренок и пылесосик1, а потом qbasic, но я никогда не воспринимала qbasic как прям свой удобный язык).
Осваивала в 2004 по Ламе. Ещё в винде - это был Activestate perl2. Писала полезняшки для себя и совсем изредка в рабочих целях. Даже возникала смешная (и неприятная, и лично мне невыгодная) ситуация, когда внезапно сделала всю работу, на которую меня брали. Совсем :)
Но сохранилось что-то мало.
perl -MCPAN -e shell
- получить оболочку для разговора со cpan.- -e - перловый однострок
- -i - редактировать «in place», после -i можно поставить хвост для бэкапления файлов, если нужны копии. Если в этом указанном будет *, она будет заменена на имя файла, а остальное - вокруг звёздочки, как указано.
- -n - обрабатывает файлы построчно
- -p - обрабатывает построчно и печатает
- -M - подключает модуль
Смотреть это всё подробнее и прочие плюшки запуска:
perldoc perlrun
- засунуть flame, по которому генерится картинка, в png - несделанное
encode and decode url strings
URL addresses only accepts alphanumeric characters and some punctuation symbols, like parenthesis and underscore.
If you need to use any other symbol (like space) you have to URL encode it using a percent sign followed by the two hexadecimal digits that represents that digit in the ASCII table.
For example, the space symbol is character 32 (hexadecimal 20) in the ASCII table, so it's expressed as %20.
In Perl, the easiest way to URL encode a string is to use uri_escape() function from URI::Escape module. This function converts all the unsafe symbols of a string to its URL encode representation.
Conversely, uri_unescape() converts a URL encoded string to its normal representation.
#!/usr/bin/perl use URI::Escape; my $string = "Hello world!"; my $encode = uri_escape($string); print "Original string: $string\n"; print "URL Encoded string: $encode\n";
sha256
- sha1($data,…)
- This function will concatenate all arguments, calculate the SHA-1 digest of this ``message'', and return it in binary form.
- sha1_hex($data,…)
- Same as sha1(), but will return the digest in hexadecimal form.
- sha1_base64($data,…)
- Same as sha1(), but will return the digest as a base64 encoded string.
#!/usr/bin/perl use Digest::SHA qw(sha1); my $data="string"; print unpack("H*", sha1($data)), "\n";
или
#!/usr/bin/perl use Digest::SHA qw(sha1_hex); my $data="string"; print sha1_hex($data), "\n";
ссылки про сокеты
Специальные переменные для мэтчей
local $_ = 'abcdefghi'; /def/; print "$`:$&:$'\n"; # prints abc:def:ghi
Соответственно, часть строки до совпадения, совпадение, часть строки после.
Чтение файла
use Path::Tiny qw( path ); my $file = 'data.txt'; my $data = path($file)->slurp_utf8;
- :Slurper
- Path::Tiny
Перлушка для превращения текста со всякими &xxx; и &#nnn; в нормальный utf8
Из моего же поста на welinux — http://welinux.ru/post/5018/
. Где тот Welinux, а текст остался.
#!/usr/bin/perl use HTML::Entities; binmode ("STDOUT", ":utf8"); print decode_entities(<>);
или почти то же однострочником от freefd:
perl -MHTML::Entities -e"use open ':locale'; print decode_entities <>"
Для превращения текста со всякими &xxx; и &#nnn; в обычный utf8. Понадобилось из-за штуки, которая в виде таких numeric character references и character entity references сохраняет всё, что не основные символы (латиница, цифры и что-то ещё по минимуму). Кириллицу, например.
- use HTML::Entities; — там сделали главную часть работы за меня :)
- binmode («STDOUT», «:utf8»); — чтобы Perl не ругался на необходимость печатать расшифрованное :)
- print decode_entities(<>); — читать справа налево. Берём нечто со stdin — <>. Превращаем в вид желаемый — decode_entities. И печатаем — print — на stdout.
Модуль HTML::Entities мне даже ставить не пришлось, в дебиане (сквизе) он в пакете libhtml-parser-perl, который был установлен по зависимостям к rss-читалке.
Советы по улучшению или замене на лучшее приму с благодарностью. :) Сделано было по принципу «лишь бы быстро справиться с задачей». Справилось.
В комментариях cblp подсказал неплохую штуку для перекодирования имён файлов — convmv.
Ссылки
- https://t.me/usePerlOrDie - о языке perl
- https://t.me/modernperl
- https://t.me/modernperl_flood - болталка.
- Preface(Modern Perl 2014) - http://modernperlbooks.com/books/modern_perl_2014/00-preface.html , https://github.com/timurn/modern_perl_book/tree/russian_translation
- Beginning Perl Programing with Emacs http://cpansearch.perl.org/src/YEWENBIN/Emacs-PDE-0.2.16/lisp/doc/QuickStartEn.html
- https://en.wikipedia.org/wiki/Perl_module - на удивление милое описание про модули.
- https://en.wikipedia.org/wiki/Category:Perl
- https://perlmaven.com/perl-tutorial
- https://perlmaven.com/dancer - про Dancer мне интересно отдельно.
- https://stackoverflow.com/questions/13631915/execute-perl-in-emacs-most-basic
- http://obsidianrook.com/devnotes/elisp-for-perl-programmers.html
- https://perldoc.perl.org/
- https://perlmonks.org
Тип, что нужно для хорошего коду
Не сохранила, откуда прихватила.
- Perl Best Practices
- Perl::Tidy
- POD
- Perl::Critic https://perlmaven.com/perl-critic
- Test::*
- Devel::Cover
- http://oreilly.com/catalog/9780596001735
- http://search.cpan.org/dist/Perl-Tidy/
- http://www.literateprogramming.com/knuthweb.pdf
- http://www.pm.org/faq/ - Perl Mongers Frequently Asked Questions. Это про группы перловщиков.
Сноски:
https://pandia.ru/text/78/398/80755.php или https://ikt-det.jimdofree.com/%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B8%D0%BA%D0%B0/%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D0%B8/%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C-%D0%BA%D0%B5%D0%BD%D0%B3%D1%83%D1%80%D0%B5%D0%BD%D0%BE%D0%BA/