Цифровой садик - приветственная

Цифровой садик - приветственная | Полный список всего, что тут есть | RSS | Подписаться через follow.it

25.11.2024

perl

Кажется, первый «родной» язык (не первый вообще, до того были кенгуренок и пылесосик1, а потом qbasic, но я никогда не воспринимала qbasic как прям свой удобный язык).

Осваивала в 2004 по Ламе. Ещё в винде - это был Activestate perl2. Писала полезняшки для себя и совсем изредка в рабочих целях. Даже возникала смешная (и неприятная, и лично мне невыгодная) ситуация, когда внезапно сделала всю работу, на которую меня брали. Совсем :)

Но сохранилось что-то мало.

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";

опции при запуске perl

Usage: perl [switches] [–] [programfile] [arguments] -0[octal/hexadecimal] specify record separator (\0, if no argument) -a autosplit mode with -n or -p (splits $_ into @F) -C[number/list] enables the listed Unicode features -c check syntax only (runs BEGIN and CHECK blocks) -d[t][:MOD] run program under debugger or module Devel::MOD -D[number/letters] set debugging flags (argument is a bit mask or alphabets) -e commandline one line of program (several -e's allowed, omit programfile) -E commandline like -e, but enables all optional features -f don't do $sitelib/sitecustomize.pl at startup -F/pattern/ split() pattern for -a switch (//'s are optional) -g read all input in one go (slurp), rather than line-by-line (alias for -0777) -i[extension] edit <> files in place (makes backup if extension supplied) -Idirectory specify @INC/#include directory (several -I's allowed) -l[octnum] enable line ending processing, specifies line terminator -[mM][-]module execute "use/no module…" before executing program -n assume "while (<>) { … }" loop around program -p assume loop like -n but print line also, like sed -s enable rudimentary parsing for switches after programfile -S look for programfile using PATH environment variable -t enable tainting warnings -T enable tainting checks -u dump core after parsing program -U allow unsafe operations -v print version, patchlevel and license -V[:configvar] print configuration summary (or a single Config.pm variable) -w enable many useful warnings -W enable all warnings -x[directory] ignore text before #!perl line (optionally cd to directory) -X disable all warnings

ссылки про сокеты

Специальные переменные для мэтчей

local $_ = 'abcdefghi';
/def/;
print "$`:$&:$'\n"; # prints abc:def:ghi

Соответственно, часть строки до совпадения, совпадение, часть строки после.

Чтение файла

https://perlmaven.com/slurp

use Path::Tiny qw( path );

my $file = 'data.txt';
my $data = path($file)->slurp_utf8;
  • File::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.

Ссылки

Тип, что нужно для хорошего коду

Не сохранила, откуда прихватила. [2013-06-16 Вс 16:56]

Сноски:


Если у вас есть мысли, комментарии, предложения или отклики по поводу этой страницы или этого цифрового сада в целом, напишите мне сообщение на agnessa@agnessa.pp.ru. Мне ооочень интересно!

Задонатить.


An IndieWeb Webring 🕸💍