- 1
- 2
- 3
use Unicornify::URL;
my $url = unicornify_url( email => '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abc7cad9d9d2ebdccac7c785c4d9cc">[email protected]</a>' );
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
use Unicornify::URL;
my $url = unicornify_url( email => '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abc7cad9d9d2ebdccac7c785c4d9cc">[email protected]</a>' );
https://metacpan.org/pod/Unicornify::URL
PACTPOBblu_nemyx # 0
MAKAKA # 0
я рад, чот мне удалось зафорсить перл;)
bagrinho # 0 ⇈
Попробуй опубликовать подборку программ, в которых особенности «Перла» позволяют лаконично решить задачу.
guest # 0 ⇈
bagrinho # 0 ⇈
guest # 0 ⇈
В перле огромное количество идиом из awk, sed, vi (точнее в vi и sed они из ed) и sh, потому прыщебляди командлайновой он прост и понятен, а когда на нем пришли делать сайты люди, которые пользовались win98 и писали на паскале до этого, то у них начал глаз дергаться от синтаксиа.
почему
потому что
почему
потому что
Почему $1?
потому что в shell и awk $1.
Почему
Потому что
итд
bormanb # 0 ⇈
guest # 0 ⇈
На самом деле ничего сложного.
Есть три типа данных:
* Скаляр
* Массив
* Хеш
О скаляре можно всегда думать, как о строке (типа нет даже в рантайме).
У каждого типа свой неймспейс (как у структов в сях), тип задается по сиглу.
Казалось бы, обращаться к элементу массива нужно бы так
@users[42];
но! В массиве и хеше могут лежать только скаляры, и обращаясь к конкретному элементу мы обращаемся к скаляру, ведь элемент скаляр.
потому мы пишем
$users[42];
"$" означает как-бы "артикль единственного числа", а "@" -- артикль множественного.
@foo = @bar; #скопировать массив
print $foo[32]; # напечатать его элемент
важно что
$foo
и $foo[32] находятся в разных немспейсах.
Массив можно инициализировать конструкцией языка -- списокм
@users = ("foo", "bar");
Любое выражение может иметь разное значение в зависимости от контекста (их два -- списковый и скалярный) так же как слово "часы" может означать часы на стене или часы как время.
При присваивании lvalue выбирает контекст.
список в скалярном контексте возвращает последний элемент
$foo = ("A", "B", "C"); # будет "C"
а в списковом -- заполняет массив
@foo =("A", "B", "C");
Массив в скалярномконтексте возвращает размер
$foo = @foo; #3, как размер массива.
идиома
if (@foo) #выполнится если массив не пустой так как 0 означает false)
print @foo; # выведет массив склеив его
зафорсить контекст можно так:
print scalar @foo; #выведет 5
Оператор <> получает дескриптор файла и в скалярномконтексте считывает одну строку, а в списковом -- массив
@foo = <STDIN>;
но
while (my $foo = <STDIN>) {
print $foo;
}
Почти все операторы по разному ведут себя в скалярном и списковом контексте
guest # 0 ⇈
$arrRef = \@foo;
@bar = (42, $arrRef);
разыменовывают ссылку так:
@foo = @{$arrRef};
Косвенно обращаются к элементу так
$arrRef->[42] #как в си.
можно сразу создать анонимный массив и получить на него ссылку. нужны квадратные скобки
$arrRef = [1,2,3,4,5];
Есть еще вивификация: при обращении к Undef переменной как к ссылке намассив он создается
my $arrRef;
$arrRef->[13] ='a';
Хеш работает аналогично, узнавание о нем оставлю тебе вкачестве домашней работы
bagrinho # 0 ⇈
Смотрел исходники. Тип есть, но он недоступен простым смертным. API для доступа к типу отсутствует напрочь. Интерпретатор сам выбирает, в ячейку какого типа сохранить значение, и сам на лету конвертирует при извлечении.
Так что да, проще думать, как о строке, которая может автоматически сконвертироваться в число, если встретится выражение с арифметическими операторами.
guest # 0 ⇈
В python есть явное знание о типе переменной
В перле так нельзя, потому операторы там разные: * и x.
И для кокатенации: . и +
И для сравнения (как в ш, только наборот)
Это отличается и от JS, где хоть тип и есть, но он может неявно приводиться (в питоне не может, а в перле и типа-то как бы нет, как в sh)
В общем как в lua есть один нескалярный тип -- табла
так и в перле есть один скалярный тип
DypHuu_niBEHb # 0 ⇈
In computer lingo, the functions are overloaded on the type of their return value.
в .NET есть тоже такая перегрузка, но C# внее не может
guest # 0 ⇈
Оператор <FILE> в скалярном котексте возврашает следующую строку, а в списоковом --массив.
Мы хотим получить количество строк в файле.
если мы напишем так
то $foo зафорсит скалярный контекст, и получит первую строчку из файла.
Конечно, можно сказать так
но хочется меньше буков.
То-есть нам нужно
* сфорсить списковый контекст
* а затем сфорсить скалячрный
Для этого есть оператор goatse. Правому операнду он обеспечивает списковый контекст, затем результату форсит скалярный
на самом деле левая "=" тут это часть оператора присваивания, можно сказать так
Можно так же воспользоваться тем, что оператор анонимного массива [] форсит списковый контекст для всех своих операторов, и схлопывает их
так что можно скзаать так
и так, получение количества строк в файле в перле
либо так
guest # 0 ⇈
Такой вот чудесный язык. Для такой простой задачи три способа, один другого лучше.
bagrinho # 0 ⇈
guest # 0 ⇈
bagrinho # 0 ⇈
guest # 0 ⇈
как и $! (ошибка последней операции)
как и $? в шеле
как и %ERRORLEVEL% сам знаеш где
как и errno
вот это всё
guest # 0 ⇈
например
guest # 0 ⇈
О сигилах можно думать, как об артиклях: Ларри же лингвист,
Если ты говоришь о скаляре, то ты скажешь "$"
Если о массиве -- @
Хеш будет %
Функция &, но в современном языке уже можно опускать
Если ты говоришь обо всем сразу, то *, но в этом часто путаются даже нативщики, так что забей.
Нужно только помнить, что ссылка это скаляр, на что бы она ни указывала (точно так же, как в C/C++/C# поинтер и/или референс всегда просто небольшое число, и всегда одного размера, в независимости от того, на что оно указывает).
@petoohs -- массив петухов
$petoohs[1] -- конкретное значение в массиве (это всегда скаляр, в массиве только скаляры могут храниться
my $hashRef = \%petuhsToKurochkas; # ссылка на хеш петухов на курочек.
При этом хеши и массивы -- типы списковые, а скаляр это скаляр.
Cписковые типы имеют внутри список (причем список можно представить как хеш (k,v,k,v) а можно как массив.
Возвращаемое значение функции зависит от контекста (то есть от того, что я прошу ее вернуть): скалярного или списковово.
$petuhs = get_petuhs(); #я прошу функцию вернуть скаляр
@petuhs =get_petuhs(); # прошу массив
Всё просто же
bagrinho # 0 ⇈
admin # 0 ⇈
bagrinho # 0 ⇈
admin # 0 ⇈
j123123 # 0 ⇈
А то котики это явно не в тему
koshka_Sviborga # 0 ⇈
Rooster # 0 ⇈
Booster # 0 ⇈
Rooster # 0 ⇈
А почему ты представляешь себе брутальных мущинок?
Booster # 0 ⇈
Rooster # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
Rooster # 0 ⇈
Форт и правда в основном ради фана, ну и иногда хексы считаю. Хотя, например, если вдруг понадобится какой-нибудь DSL, парсер или типа того, то там форт мог бы пригодиться. Но это врядли.
Еще у меня есть всякие недописанные тулзы для личного пользования, например недописанная скриншотилка под венду на SP-Forth, на которую я забил когда понял что например скрыншот видосика средствами одного винапи не осилить 🙁
HoBorogHuu_nemyx # 0 ⇈
Очень интересно, что накопилась целая библиотека заготовок для шрифтов. Один скрипт может генерировать не только гарнитуру, но и семейство гарнитур. Просто меняя параметры, можно получать жирный шрифт, наклонный, курсив, с засечками и без, моноширинный, плавно менять размеры отдельных элементов...
Так вот «METAFONT» форкнули и написали «METAPOST», который на выходе генерирует не растровый шрифт, а векторную картинку на языке «Postscript».
Мне кажется, «METAPOST» неплохо бы подошёл для вореций аватарок. Описываем контур петуха, а потом меняем некоторые параметры и получаем пачку картинок.
PACTPOBblu_nemyx # 0
Например, исходный адрес моей картинки:
https://gravatar.com/avatar/43609ded576a8abf167f193618a45cd1
Заменяем точку входа на «Unicornify»:
https://unicornify.pictures/avatar/43609ded576a8abf167f193618a45cd1?s=128
К сожалению, сервис не умеет генерировать єдинорігів крупнее, чем 128×128.
guest # 0 ⇈
https://bitbucket.org/balpha/go-unicornify/src/default/main.go
PACTPOBblu_nemyx # 0 ⇈
https://bitbucket.org/balpha/go-unicornify/src/default/unicornify/
guest # 0 ⇈
В другом хорошем языке это пишется в одну примерно строчку
bagrinho # 0 ⇈
guest # 0 ⇈
bagrinho # 0 ⇈
bagrinho # 0 ⇈
guest # 0
забавная какая книжка есть
заметьте кстати, языка в кавычках в списке нет
мнение макак никого не ебет
bagrinho # 0 ⇈
guest # 0 ⇈
найти всех живых узеров на машине
$ awk --lint -f 1.awk /etc/passwd
guest # 0 ⇈
TOPT # 0 ⇈
guest # 0 ⇈
bagrinho # 0 ⇈
Может вдруг с цепи сорваться
И ко всем чертям умчаться,
Превратив живое в тлен.
Ничему не удивляться,
Ничему не удивляться,
Ничему не удивляться,
Никогда не должен истый джентльмен!
guest # 0 ⇈
Это же по О'Генри
govninho # 0 ⇈
MAKAKA # 0 ⇈
"SELECT *FROM PISATELI WHERE FAMILIA=O"
3oJIoTou_xyu # 0 ⇈
Где я могу найти надежду, которая не покидает меня?
Я буду ждать, думая, где спрятать себя
В моих мыслях я буду спать и в тишине я проснусь
Мелодии, которые заставляют меня вспомнить и забыть
Правитель. Ты оставил мне мечту?
Перестань... И вспомни нас...
Ты должен остановиться и вспомнить нас
Где вы прячете нас, пока ты наблюдаешь из ниоткуда?
Почему бы тебе не вернуться из своего безымянного бессознательного состояния?
Ты тот, кого я встретил - ты смерть.
Я не сплю, потому что ты ничего не оставил для нас. ничего.
Я взял все из этой жизни. Там, где нет пути назад.
Хотите вспомнить, забыть и пропустить?
guest # 0 ⇈
TOPT # 0 ⇈
guest # 0 ⇈
booratihno # 0
plusinho # 0 ⇈
booratihno # 0 ⇈
друзья, проверьте, у вас работает?
-__- # 0 ⇈
booratihno # 0 ⇈
или в IDE.one
-__- # 0 ⇈
Можно ещё так:
guest # 0 ⇈
https://pbs.twimg.com/media/EINnf2hXYAEh7mI.jpg:large
whois # 0 ⇈
whois # 0 ⇈
-__- # 0 ⇈
booratihno # 0 ⇈
-__- # 0 ⇈
guest # 0 ⇈
-__- # 0 ⇈
guest # 0 ⇈
Но починилось же?
Кстати, очень много ненужных скобок.
Я за
-__- # 0 ⇈
gost # 0 ⇈
gost # 0 ⇈
whois # 0 ⇈
Steve_Brown # 0