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

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

15.02.2023

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

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

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

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;

Перлушка для превращения текста со всякими &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 🕸💍