- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
#! /usr/bin/perl
use strict;
use warnings;
my %h1 = (one => 1, two => 2);
my %h2 = (three =>3 , four => 4);
sub h_uno { \%h1 }
sub h_multi {
my %all = (%h1, %h2);
\%all;
}
while (my ($k, $v) = each %{h_uno()}) {
print "k=$k, v=$v\n";
}
# следующий цикл не завершится никогда
#while (my ($k, $v) = each %{h_multi()}) {
# print "k=$k, $v=$v\n";
#}
>>09.10.2018
воу
Язык будущего
За 20 лет можно было изучить этот язык так, чтобы писать в одну строчку всё, что угодно, включая систему документооборота, нейросеть и трехмерную стрелялку.
поддерживать проекты 1997-го года
У программиста есть потребность выябываца. Перл, руби и даже С++ эту потребность понимают. А питон и пхп -- нет.
Но все же != зарплата часть суммарная большая
Такое нужно писать исключительно на хаскеле, иначе так и зашипят в прод как есть без переписывания.
1. Perl: First Appeared December 18, 1987
2. Pascal: First appeared 1970
Да перл еще сопли на стенке пальцем размазывал, когда на пацкале уже говномесили забористый Ънтерпрайзный бойлерплейт
«Common Lisp» (стандарту уже 24 года). Есть куча довольно старого кода на нём, которая прекрасно компилируется новыми компиляторами и не требует никакой поддержки.
Это вам не какой-нибудь «Rust».
Кстати, ты можешь везде писать
- Переведи на "Lisp".
- Поэтому я за "Lisp".
)))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Извините, остальная часть не влезла в 2к символов.
B409 —— это MOV AH, 09H (функция 09 —— вывод строки в сосноль).
CD21 —— это INT 21H.
B8014C —— это MOV AX, 4C01H (функция 4CH —— выход, код разврата 1).
За каким-то хером выводим фразу "This program cannot run in DOS mode". Нахрена DOS-stub в dll-файлах, если их всё равно никто не будет запускать как программу (их нужно переименовать в exe, чтобы в голом ДОС'е увидеть это сообщение)? Я бы этот stub сократил до CD20. Кстати, в "OS/2" у некоторых DLL так называемый DOS-stub полностью отсутствует и они начинаются не с "MZ", а сразу с "LX" или "NE".
5045 —— это "PE".
4C01 —— это "Intel 386" (32-битная программа).
Поэтому я за "PHP".
если заминусовать комментарий с рейтингом -999, то может получиться смешно
Когда я работал на заводе -- мы юзали Perl.
И язык этот во сто крат интересней всяких там педонов.
Поясни, почему петля будет бесконечной?
сварщиком?
>> для изготовления деталей. Контроль качества изготавливаемых деталей.
То-есть ты админ/программер/QAщик?
Если коротко -- each == говно и связывает свой итератор с обьектом-аргументом.
Если развернуто: http://blogs.perl.org/users/rurban/2014/04/do-not-use-each.html
Ну окей, each создает итератор и хранит его внутри хеша, отсюда две проблемы:
1) нельзя удалять и изменять данные посреди итерации (так-то в жабе например тоже нельзя)
2) не реентерабельный
Ну то есть ужас, но уж никак не ужас-ужас-ужас.
а еще с sed и awk
``h_multi`` каждый раз создает новый хеш и возвращает на него ссылку.
Почему ссылку?
Мы обязаны это делать, так как вернуть из функции можно только скаляр (хеш вернуть нельзя, а ссылка на него это скаляр).
``each`` создает итератор и привязывает его к хешу. Это сильно отличается от того, как устроены итераторы в других языках, но похоже на то, как работает указатель внутри открытого файла.
Просто представьте себе что внутри хеша есть указатель на ключ, следующий each сдвигает его на следующий ключ, и так до конца.
Однако ``each`` вычисляет значение выражения каждый раз, когда дергается цикл.
Соответственно, каждый раз вызывается ``h_multi``, который создает новый хеш с указателем на первый элемент.
``each`` его считывает, двигает дальше, получает новый хеш, его тоже читает, снова двигает, и так до бесконечности.
Q: почему $k разные в разных итерациях?
A: потому что hash не сортирован, это не массив
Q: почему работает h_uno?
A: потому что там возвращается ссылка на уже существующий хеш %h1, в ``h_multi`` создает новый хеш посредством слияния h1 и h2.
Q: чтобля?
A: в списковом контексте хеш выдает список ключ-значение. Несколько списков в списке сливаются (a,b,c,d) = ((a,b),c,d). Получившийся список при приведении к хешу заполняет его ключами из начениями (для примера выше a=>b, c=>d).
Кокок, я прошел собеседование?
ну и конечно же вот верная версия
либо