[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.37854 Reply
File: aadhhaaeo.jpg
Jpg, 15.55 KB, 300×300 - Click the image to expand
edit Find source with google Find source with iqdb
aadhhaaeo.jpg
Не нашел перлотреда.
Листал пиратбей и наткнулся на книжку "Beginning Perl". Стоит ли читать?
Спрашиваю, потому что давно уже ничего не кодил, с линукса перелез на шинду, многое уже подзабыл.
>> No.37856 Reply
>>37854
Не знаю, что это.
Лучше читни modern perl.
Алсо, не так давно выпустили четвертый кэмелбук, но я его не читал пока.
>> No.37881 Reply
>>37854
У нас все треды в путеводителе будут звучать как "Не нашёл треда, решите мне мою проблему". Может лучше писать ОП-посты более общо и описывать проблему в комментариях? Нужно добовлять этот тред?
>> No.37883 Reply
>>37881
Хорошая идея, было бы неплохо.
>> No.37885 Reply
>>37883
Которая?
>> No.37888 Reply
>>37885
> Может лучше писать ОП-посты более общо и описывать проблему в комментариях?
и/или
> Нужно добовлять этот тред?
>> No.37889 Reply
Коротенькие предыдущие треды (вдруг кому-то интересно):
>>720
>>6741
>>10820
>>11114
>>31441
>> No.37891 Reply
>> No.37946 Reply
Посоветуйте книжек, для того, чтобы писать сайты.
>> No.37947 Reply
File: 798E7C88-52B1-4E1A-A88F-1CB61D393452_mw1024_n_s.jpg
Jpg, 103.46 KB, 1024×951 - Click the image to expand
edit Find source with google Find source with iqdb
798E7C88-52B1-4E1A-A88F-1CB61D393452_mw1024_n_s.jpg
>> No.37948 Reply
>>37947
А ведь так и есть. Похапэ начался как пачка перловых скриптов для веболяпства. Я вот могу легко пэхопить без особого знания с небольшим гуглежом всех этих функций.

В целом, фронтэндота на перле сейчас не нужна, максимум поддержка легаси, так что не советую туда лезть.
>> No.37960 Reply
File: -.png
Png, 36.73 KB, 909×352 - Click the image to expand
edit Find source with google Find source with iqdb
-.png
>> No.37970 Reply
>>37948
> Я вот могу легко натягивать вёрстку на ЙОБА-цмс
Какая разница, что ты можешь без особого знания? Более рационально накапливать и применять особые знания, чтобы увеличивать эффективность труда.
>> No.38079 Reply
Лучше подскажите, как мне запустить перл в nginx в арче?
При попытке открытия exapmle.com/test.pl — мне выводится 502 bad gateway. Уже все возможные права доступа файлу я дал, что ему еще надо?
fcgiwrap установлен, вот конфигурация из nginx.conf:
    location ~ \.pl$ {
        gzip off;
        try_files $uri =404;
        root /var/www/example.com/www;
        fastcgi_pass unix:/run/fcgiwrap.sock;
        include fastcgi.conf;
        fastcgi_index index.pl;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fastcgi_ignore_client_abort off;
    }
>> No.38080 Reply
>>38079
Вот из error.log:
2014/03/10 14:36:53 [error] 1202#0: *1 connect() to unix:/run/fcgiwrap.sock failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: example.com, request: "GET /test.pl HTTP/1.1", upstream: "fastcgi://unix:/run/fcgiwrap.sock:", host: "example.com"
>> No.38083 Reply
Как в вакабе генерируется капча? Там же не используются шрифты, imagemagick или еще что-то подобное.
Сорцы смотрел, но нихуя не понял.
>> No.38084 Reply
>>38083
Ох вау, посмотрел, такое-то наркоманство - строят гифку побайтово.
>> No.38100 Reply
>>38084
А мне вот не понятно, как там накладываются буквы на картинку без шрифтов? Как там устроено?
>> No.38101 Reply
>>38100
Буквы шрифта состоят из набора x,y координат точек, между которыми проводятся искривленные линии.
Работы с графикой там нет вообще - просто двухмерный массив с точками, которые потом пакуются в байты гиф-файла и к ним приляпывается заголовок.
>> No.38192 Reply
Няши, а можно ли как-нибудь в LWP не разрывать соединение какое-то время?
То есть, скрипт делает гет, ждет какое-то время, а потом закрывает соединение.
>> No.38196 Reply
>> No.38398 Reply
А можно ли сделать так:
use List::Util qw/shuffle/;
join('',(shuffle @word));
То есть, вызвать функцию shuffle из джойна.
Работатать-то работает, только мне интересно, правильно ли так?
>> No.38399 Reply
>>38398
Правильно, почему же нет. Я бы ещё внутренние скобки выбросил для красоты.
>> No.38400 Reply
>>38399
внешнии
>> No.38401 Reply
>>38400
Можно и без внешних, но такие лысые вызовы как-то не особо смотрятся. А без внутренних будет меньше нагромождений скобок, что плюс.
>> No.38411 Reply
>>38401
будет красивее. как на хаскель. слева направо
>> No.38414 Reply
>>38411
Какой ещё хаскель? Перл прайд ворлдвайд o/.
>> No.38425 Reply
>>38414
sum reverse grep { sqrt $_ } sort shuffle @a
красивее
>> No.38434 Reply
>>38425
С одним параметром да, а с 2+ коряво, как с тем же джоином.
>> No.40423 Reply
https://github.com/seishun/node-steam - есть ли что-нибудь подобное под perl?
Хочу написать бота, который будет накручивать время в играх 24/7, скрипт будет висеть на какой-нибудь впске.
Похожий скрипт нашел под ноду но разбираться в нем лень и соответствующем api под steam.
>> No.40424 Reply
>>40423
Было бы на сипане. Проще это допилить, сколько там того жабаскрипта.
>> No.40763 Reply
не знаю зачем читаю learning perl, не знаю какие скрипты мне писать. просто тянет к перлу.
>> No.40765 Reply
>>40763
Наверни потом data munging in perl. Канонічное применение для практических задач, может уже и для себя пригодится.
>> No.41280 Reply
Давно не говнокодил и подзабыл.
$var = shift;
Это же будет в списочном, а не скалярном контексте?
А вот если $var = @_, то это уже в скалярном значении т.е. тут уже нужно заключение в скобки.
На счет второго я знаю, просто как пример.
>> No.41281 Reply
>>41280
Суть верна, а термины наоборот, лол.
>> No.41283 Reply
File: Screenshot-6.png
Png, 15.09 KB, 984×161 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot-6.png
>>41280
Т.е. $var = shift; это скалярный контекст?
Алсо, почему по этому ЯЗЫКУ ТЫСЯЧАЛЕТИЯ нету живого обсуждения здесь? Нет, это понятно что уже все всё обсудили, все давно отформатировали текст, но ведь перл во многих отраслях используется, и платят достаточно холошо.
>> No.41284 Reply
>>41283
Да, шифт выпиливает один элемент, поэтому скалярный. $var = @array без скобок тоже скалярный, поэтому возвращается длина массива.

Не обсуждают, потому что нубы учат питон, а остальные пользуются.
>> No.41285 Reply
>>41283
Ну лично я последние строки на нём дебажил (не писал) в 2006 году.
>> No.41302 Reply
>>41283
Время прошло же. Он был ок в 90е, когда другое скриптоговно еще не развилось достаточно (был PHP и раннего питона). Ну а потом где-то с питона 2.5 внезапно питон стал божественным, но потом ruby c такой-то экосистемой, а потом питонисты спиздили все наработки рубистов, а потом javascript serverside пришел,.... Сейчас ни один сколь-нибудь интересный проект не начинают на перле, только всякое легаси поддерживают (в основном, новостные агентства всякие. но там наравне с этим идут всякие VBA scripts, так что не советую туда вдваваться). Язык отличный, но в индустрии не нужен. Вообще, если коммьюнити вытянет (привет, Catalyst), то, может и не умрет. Но вообще начинающему программисту шквариться просто не имеет смысла об это. Я понимаю инетер к lua, groovy, например, но устаревший язык для веба? Как у него с прекомпиляцией, многопоточностью и вставками на сях? А поддержка математики для серьезного бекенда?
>> No.41303 Reply
>>41302
Для современного веба действительно смысла мало, хотя технологии есть, и есть моджо, который няшнее каталиста http://mojolicio.us/
>> No.41452 Reply
С днем рождения, что ли
Лучше поздно, чем никогда.
>> No.41626 Reply
Как выполнить JS скрипт с элементами DOM из перла?
Про модули JE и прочие знаю, но дело в том что этот js-код берется с сайта, а там присвоения переменным в самом js вида
a = document.getElementById('blahblah'); Поможите, ничего в голову не приходит.
жабаскрипт плохо знаю, поэтому извините, если что не так с терминами.
>> No.41627 Reply
>>41626
А обязательно из перла? Какой-нибудь selenium не прокатит?
>> No.41628 Reply
>>41626
phantomjs
>> No.41630 Reply
>>41627
Слишком громоздко, мне кажется. Да и из перла будет удобней.
>> No.41675 Reply
Покайтесь! В этом || следующем году выйдет Perl 6.
>> No.41687 Reply
>>41675
Вы говорили это в прошлом году! Быстрее PHP 7 выйдет.

мимо go-тролль
>> No.41692 Reply
Чего нужно читнуть, чтоб базово понимать синтаксические особенности? Всякие & $ @. Что это вообще? Что делает scalar и зачем оно нужно?
>> No.41693 Reply
>>41692
Chromatic — Modern Perl.
Можешь еще для интереса почитать книгу с ламой и альпакой.
Только для чего учить это протухшее... кхм... в 2015 году?
>> No.41694 Reply
>>41687
Ларри говорит, что в этом году язык уже появится в продакшене.
>> No.41695 Reply
>>41693
> Только для чего учить это протухшее...
А мне и не надо учить и досконально всё знать. Мне надо уметь его читать постольку поскольку. Портирую сейчас одну штуку в 1к строк на свой любимый.
Если я правильно понел про scalar, то это всего навсего длинна массив-подобной хрени. Но вот что это за магия с @ я пока не совсем въехал.

Вообще для самообразования полезно perl знать. Я так понел главная фишка сабжа это стабильность. Скрипт из прошлого века в прямом смысле будет сегодня работать без ритуальных танцев с бубном.

>>41694
Так он каждый год так говорит. О чём и речь.
Это как Мисаки, которая не придёт. Это как социализм, который не наступит.
>> No.41696 Reply
>>41695
scalar не связан с масивами, просто явно включает скалярный контекст, что в случае с массивом возвращает его размер.
Вот тебе пример с контекстами. Так работает везде. http://ideone.com/zy6o01

Можешь посмотреть perl pocket reference. Там всё плотненько изложено.
>> No.41697 Reply
>>41695
Так в этом году он уже с докладом на конференции выступать будет.
http://pragmaticperl.com/issues/22/pragmaticperl-22-perl-6-xxi-%D0%B2%[...].html
inb4 он каждый год выступает
>> No.41698 Reply
Что-то я немного запутался.
Функцию не обязательно вызывать с аргументом что ли?
Допустим
`my $huita = 'test';
sub yoba { my $huita = shift; say $huita }
yoba($huita);`
работает также как и
`my $huita = 'test';
sub yoba { say $huita }
yoba;`
>> No.41699 Reply
Алсоу, что лучше использовать?
cpanplus or cpanminus?
>> No.41700 Reply
>>41698
Норкоман штоле?
Так в любом языке. Грубо говоря, это глобальная переменная.
>> No.41701 Reply
>>41696
> perl pocket reference
Круто, чо. Пойду раскочегарю принтер и сдую пыль с переплётного станка.
> http://ideone.com/zy6o01
Такая то магия. Кажется я понел, в чём там суть.

Алсо вспомнил вот про http://hyperpolyglot.org/ У оного теперь и репа на уютном гитхабчике есть.
>> No.41702 Reply
>>41699
cpanminus это аналог всяких моднявых установщиков из руби, питона и прочего.
А плюс это для использования из кода.
>> No.41703 Reply
>>41695
полезно прочитать о my, our, local
>> No.41704 Reply
Где почитать про коллбеки?
Плохо понимаю как они работают.
>> No.41705 Reply
>>41704
Что там понимать? Ссылка на функцию передается как параметр и вызывается в нужном месте.
>> No.41706 Reply
>>41705
Это-то понятно, но все же, где еще про них почитать?
Если я начну излагать что именно мне не понятно, то будет очень стыдно.
>> No.41707 Reply
>>41706
Есть вот такая охуенная книжка http://hop.perl.plover.com/
Если осилишь её, будет очень хорошо, не только для перла.
>> No.41708 Reply
>>41707
Спасибо.
Правда у меня проблема была с непониманием замыканий, оказывается.
>> No.41718 Reply
Не знаю, у меня как-то все в голове перепуталось, и теперь я не понимаю, зачем нужны ссылки на подпрограммы.
Может кто-нибудь объяснить?
Читаю тут «Intermediate Perl», и совсем запутался в ссылках на функции. Надеюсь доброанон мне поможет.
>> No.41719 Reply
>>41718
Ссылки на функции нужны в нескольких задачах вроде выполнения S-выражений:
(+ 2 (* 2 2))
Результат будет "2 + (2 * 2)", то есть 6.

Больше почти нигде ссылки на функции не применяются, всё делается либо препроцессором, либо ещё как-то.
>> No.41720 Reply
>>41718
Вот распространенная фича http://valera.asf.ru/perl/cookbook/cont.php?id=120
Т.е. есть стандартный рекурсивный поиск, а смысловое наполнение ему задаешь ты, через свою кастомную функцию.
>> No.41726 Reply
>> No.41727 Reply
>>41726
Лол, зачем ему хачкеле-мозголомство, если я несколькими постами выше дал годную книжку по функциональщине для перла, там хорошо разжевано.
>> No.41934 Reply
Правильно ли я понимаю:
my $sem = new Coro::Semaphore 15;
$sem->down;
# do something...
$sem->up;
Т.е. следующие 15 потоков будут запущены тогда, когда существующие 15 уже отработали?
>> No.41935 Reply
>>41934
Или все же будет запускаться по 15 потоков, не дожидаясь завершения предыдущих?
>> No.41936 Reply
>>41934
Нет, это пул. 15 в работе, остальные ждут, по мере освобождения просыпаются.
>> No.42387 Reply
>>37854
> с линукса перелез на шинду
Вот это поворот!
>> No.42922 Reply
Посоветуйте какой-нибудь годноты по ООП в перле. Желательно на русском, в ангельский не особо хорошо умею.
>> No.42923 Reply
>>42922
http://www.books.ru/books/perl-izuchaem-glubzhe-2-e-izdanie-536459/?show=1
На английском несколько старовата, но годная http://www.amazon.com/gp/product/1884777791

Алсо, есть такая охуенная книга - http://www.billhails.net/Book/
В ней по шагам пилят интерпретатор схемы. Не о том, но сам он на основе ООП, так что хороший разбор на практике, да и основная тема интересна.

Это по искаробочному ООП. Есть ещё всякая стороння йоба вроде Moose, но я не особо пользовался.
>> No.42955 Reply
File: 9530780902.jpg
Jpg, 48.13 KB, 674×600 - Click the image to expand
edit Find source with google Find source with iqdb
9530780902.jpg
Решил попробовать Mojolicious и заметил, что в ответе сервера при гет-запросе содержится content-length. Это вообще нормально? На других сайтах такого не видел.
Может быть вопрос глупый, но я ничего не пилил под веб и плохо понимаю.
>> No.42956 Reply
>>42955
Стандартный хттп заголовок, просто не обязательный. Всякие даунлоад-менеджеры пользовались им вместе с Range для многопоточной закачки, например.
>> No.42957 Reply
>>42956
Ясно, спасибо.
Я еще вот что нагуглил, только это по пыху.
http://new.xpro.su/php/content-length
> Как известно, в HTTP-протоколе есть три способа сообщить клиенту о том, что передача завершена. Первый, самый старый, -- разорвать соединение после того, как весь контент передан. Он же самый медленный, так как при этом не работает механизм Keep-Alive, и для следующего запроса клиент должен установить новое соединение. Второй -- это передача в заголовке Content-Length длины (в байтах) передаваемого контента. И наконец, третий -- передача контента блоками, перед каждым из которых передается его длина в шестнадцатеричном виде, а завершение передачи обозначается передачей блока с нулевой длиной (так наказываемый chunked transfer, возможно, о нем я напишу со временем отдельную запись).
Значит если убрать его выдачу, ничего не случится?
>> No.42958 Reply
>>42957
Да, обычно его выдают для файлов, чтобы заранее знать размер, а для страниц не особо важно.
>> No.42960 Reply
>>42958
Хорошо, ну и раз зашла тема обо всем этом, то еще один вопрос: допустим сначала мы заходим на http://127.0.0.1:8080 - сервер hypnotoad, который деплоит наше mojo приложение. В ответных хедерах connection = keep-alive, однако если проксировать запросы через nginx на site.com, то коннекшн уже равняется клосед.
Это тоже норма?
>> No.42961 Reply
>>42960
Ну keep alive это скорее фича, а не обязательный параметр, но она весьма полезна и ощутима, особенно для https.
Насколько я помню, она стала дефолтной в http 1.1, может что-то связано с этой настройкой в браузере или nginx. Я с ним особо не сталкивался, так что не в курсе что там и как.
>> No.42962 Reply
Походу, это фича, лол.
http://nginx.com/blog/http-keepalives-and-web-performance/
Сам nginx держит пул соедений с сервером, а клиентам раздается как-то хитрожопее.
>> No.43163 Reply
File: panic.gif
Gif, 31.93 KB, 100×100 - Click the image to expand
edit Find source with google Find source with iqdb
panic.gif
Ребят, нужна помощь с регулярками. Если нужно уйти в другой тред, покажите, я уйду.
Суть такова: я пропускаю через фильтр целую гору строк, выбирая с помощью регулярного выражения нужные мне куски. Метод, ясен пень, match. Код не на Perl. Мне нужно игнорировать те куски, сразу после которых идёт точка. Подстановка таким образом - ...[0-9]{1,4}[^\.] проблемы не решает. Помогите нубу, пожалуйста.

Пикрандом.
>> No.43164 Reply
>>43163
> [^\.]
Замени на (?!\.)
>> No.43166 Reply
>>43163
lookahead жи есть.
huita(?!\.)
>> No.43167 Reply
>>43164
>>43166
Спасибо, доброняши. А то я когда мануал курил, не понял, для чего он нужен. Теперь всё ясно.
>> No.45110 Reply
Когда уже Perl 6?
>> No.45112 Reply
>>45110
> Rakudo Star / November 28, 2015
>> No.47011 Reply
Книжка по Perl'у для самых маленьких
http://dobrochan.com/cr/res/56650.xhtml

Может кто подсобит
>> No.47012 Reply
>>47011
Есть же орайлевская серия с всякими козочками, три штуки для разного уровня, и с переводом. Весьма годные.
>> No.47013 Reply
>>47012
Я знаю, я их читал
>> No.47014 Reply
>>47011
Зачем писать очередную книжку для умирающего языка?
>> No.47222 Reply
Почитал бы книжки по Perl 6 на русском.
Но судя по сырноватости языка, их не будет еще долго.
>> No.47223 Reply
>>47222
Он не взлетит и не нужен.
Просто игрушка для его разработчиков.
>> No.47370 Reply
А есть ли какие-нибудь задачки под перл? Что-то вроде ruby koans, например?
Совсем нету идей на быдлокод не считая имаджборды на Mojo.
>> No.47371 Reply
>> No.47372 Reply
>>47371
Ого, спасибо.
>> No.47380 Reply
>>47371
Надо же, там есть пример где в JavaScript из функции возвращается другая функция.
Нашим бы школкам да бурситетам такую книгу.
>> No.48045 Reply
File: Без-имени.png
Png, 137.50 KB, 711×646 - Click the image to expand
edit Find source with google Find source with iqdb
Без-имени.png
Здгаствуйте, уважаемые. Прошу обратить ваше внимание на picrelated. Собственно, вопрос: существует ли хак, который позволит паровозику менять буквы в произвольных местах строки с которой он работает в данный момент, в частности, добавлять в её конец новые символы. Решение в лоб не прокатывает, движок, похоже, работает с копией блока или всей строки.
>> No.48049 Reply
>>48045
Я бы этому паровозику с большими усами усы бы пооткрутил.
>> No.48069 Reply
Попиарю-ка вам конфу. Может кто придёт.
раки@conference.ccc.de
В конфе присутствует пейсатель книжки "Я у мамы программист. Perl уровня /b/".
>> No.48074 Reply
>>48069
Ошибочка вышла.
раки@conference.jabber.ccc.de
>> No.48078 Reply
>>48074
Ну не умеешь ты троллить, уймись, болезный. Троллинг должен вызывать у жертвы жжение в пятой точке, а не наводить её на мысли о гуманных способах умерщвления обречённых животных.
>> No.48080 Reply
>>48078
В чём троллинг, сударь?
>> No.48082 Reply
>>48080
> Я у мамы программист
> уровня /b/
> конфа
> раки
Мопед чей?
>> No.48083 Reply
>>48082
Ясно
>> No.48954 Reply
>>41934
Поясните мне примерно то же самое, пожалуйста. А то везде do something.

my $sem = new Coro::Semaphore 2;
$sem->down;

async {
while (1) {
print "Thread #1", "\n";
sleep 1;
}
};

async {
while (1) {
print "Thread #2", "\n";
sleep 1;
}
};

$sem->up;

Надо запустить параллельно несколько потоков, как сделать?
Лапша выше не работает, а если вручную выйти из мейна через cede, то первый поток просто перехватывает управление и начинает бесконечный цикл. Я, наверное, не понимаю, как работают семафоры, но по-моему они просто игнорируются. Дёргать их из потоков?
>> No.48955 Reply
>>48954
Что значит игнорируются? Это просто thread-safe переменная, грубо говоря, плюс некоторый обвес функциями для семантики.
Т.е. ты можешь координировать работу тредов через семафор, изменяя его из любого треда.
>> No.48956 Reply
>>48955
спасибонепоняла.жпг

Окей. В главном потоке я создаю new Coro::Semaphore(2). Вызываю на нём down. Что происходит:
а) если у меня нет других потоков?
б) если далее один асинх?
в) если далее два асинха?
>> No.48957 Reply
>>48956
Уменьшается значение, лол. Оно вообще напрямую не привязано к потокам.
Просто в самих потоках ты можешь реализовать логику, учитывающую/изменяющую его, и таким образом управлять выполнением.
>> No.48959 Reply
>>48957
Спасибо, теперь немного понятнее.

И тем не менее, а как запустить этих потоков сразу несколько? Когда я пишу async{ ... }, ничего не происходит же.

И примеры такой логики всё-таки хотелось бы. Там что-то сложнее какого-нибудь `cede if !$sem->try`?
>> No.48961 Reply
>>48959
> И тем не менее, а как запустить этих потоков сразу несколько?
Никак, это кооперативная многозадачность, надо вручную передавать контекст.
> Когда я пишу async{ ... }, ничего не происходит же.
Становится в очередь.

Почитай документацию, штоле.
https://metacpan.org/pod/distribution/Coro/Coro/Intro.pod
https://metacpan.org/pod/Coro
>> No.48962 Reply
>>48961
Я читал это всё, и про очередь, и про ручную передачу контекста, о чём уже и писал >>48954 здесь. Может, плохо написал, нет таланта, да.
Речь именно об одновременном запуске нескольких потоков и необходимости семафоров для этой цели (иначе наличие возможности установки им значения больше двух я объяснить не могу).

> Никак
Прям вот совсем никак? Может, придумали способ, пусть даже странноватый. Других либ для мультитрединга нет, их в перле всего две и вторая делает то же самое, только хуже, насколько мне известно.
Давай только без толстоты типа ./proga.pl &
>> No.48963 Reply
>>48962
Всякие более-менее современные я не особо знаю, тащемта. Но как минимум искаробочный threads. https://perldoc.perl.org/perlthrtut.html
А что за задача у тебя?
>> No.48964 Reply
>>48963
> Но как минимум искаробочный threads
Ну вот про него я и говорил — либо он, либо Коро. И под тредами в перле обычно понимается Коро, нативные же треды использовать не рекомендуют. Они умеют то, о чём я говорил выше?

> А что за задача у тебя?
Писать вайпилки и набигать на капчу в 9000 потоков, как у пистуха было!!1
Шутка.
Но в каждой шутке есть доля правды: суть того, что я хочу, чем-то похожа. Уточнять не буду пока, потому что пока сделано ничего. Впрочем, помощь мне ещё наверняка будет нужна, а перлотредов больше и нет нигде особо. На стаковерфлоу не хочу.

Знаю, что есть модуль Coro::LWP, где что-то похожее вроде как уже сделано, но мне не интересно LWP, я хочу именно libcurl и придётся писать свои велосипеды.
>> No.48967 Reply
>>48964
> нативные же треды использовать не рекомендуют. Они умеют то, о чём я говорил выше?
Не рекомендуют по причине тяжеловесности. Умеют.

> но мне не интересно LWP, я хочу именно libcurl и придётся писать свои велосипеды.
А какая разница? Суть одна и та же.
Многопоточный хттп я делал на AnyEvent::HTTP, это неблокирующие реквесты + коллбеки, результат неплохой.
>> No.48970 Reply
>>48967
> Суть одна и та же.
В смысле?
Не помню весь список полезных фичей кёрла, отсутствующих у LWP, но одну довольно важную называю сходу — он умеет в socks5 с проксированием днс. LWP этого не умеет, и если мне нужно будет, чтобы всё работало через тор и работало наверняка, придётся помещать это в обёрнутый в тор контейнер/vm и запускать оттуда.
Или ты о чём?

> AnyEvent
Совсем забыл про это, да.
Можешь сказать, что ещё ты использовал?

Про треды - спасибо, буду иметь в виду.
>> No.48971 Reply
>>48970
> Или ты о чём?
О либах для хттп. Как-то не случалось найти отсутствие фич, хотя при модульности LWP туда всяко можно вклиниться и докостылять. Потом HTTP::Tiny добавили в core и можно вообще обойтись без жирного LWP, для большинства задач его достаточно.

> Можешь сказать, что ещё ты использовал?
В каком смысле ещё? В основном на перле делал всяких бэкендовые сервисы и автоматизации, потом помаленьку перекатился на ноду для такого, но как подручную тулзу ещё пользую.
>> No.49040 Reply
Зачем сабам и переменным атрибуты? locked, method, lvalue.

> http://www.perltutorial.org/perl-subroutine/
> sub NAME PROTOTYPES ATTRIBUTES BLOCK
> The ATTRIBUTES gives subroutine additional semantics. Perl provides three standard attributes including locked, method and lvalue.
Больше ничего не нашёл.
>> No.49041 Reply
>>49040
lvalue позволяет присваивать функции. Как тот же substr -
substr($str, 0, 10) = 123;
Не пользовался таким, так что хз, в чем может быть профит. Можно обойтись без временных переменных при всяких манипуляциях, наверное.

Остальные без понятия, какие-то забытые ооп-шные костыли скорее всего.
>> No.49202 Reply
1. Coro::rouse_cb создаёт отдельный поток? Вывод дампера не похож на таковой у инстансов класса Coro.

2. https://metacpan.org/pod/distribution/Coro/Coro/Intro.pod#The-Real-World-Event-Loops
Почему в первом примере join не блокирует? Вернее, все три join успевают вызваться ещё до завершения первого потока. Стейтменты типа print должны блокировать, даже если Coro::Socket асинхронен сам по себе. Но они даже не выполняются.
2.1 Если Coro::Socket таки асинхронен (не блокирует), почему после него идут принты (те, которые печатают в stdout)? Они же ничего не должны вывести.

3. Рассмотрим следующую лапшу:
use Coro;
use Mojo::Base -strict;

my $thr1 = async {
  my $this = $Coro::current;
  $$this{desc} = "First thread";

  my $i = 0;
  recurring Mojo::IOLoop 2 => sub { say "1st: ", $i++ };
};

my $thr2 = async {
  my $this = $Coro::current;
  $$this{desc} = "Second thread";

  my $i = 0;
  recurring Mojo::IOLoop 2 => sub { say "2nd: ", $i++ };
};

$_ -> join for ($thr1, $thr2);

start Mojo::IOLoop;
Работает как ожидается, но не из потоков $thr1 и $thr2: они умирают, как только навешивают свои коллбэки на луп, в итоге всё выполняется в одном потоке. Как сделать чтобы в каждом потоке было? Если в каждом эвент луп запускать, он заблокирует.

4. Как работают все эти асинхронные эвент лупы типа Mojo::IOLoop, когда поток всего один? Просто интересно. Coro в числе зависимостей не висит, под капотом они его не пользуют. Там своя имплементация потоков?
>> No.49282 Reply
Оказывается в перле (вроде как) есть явная типизация.
`my Foo $foo = new Foo;`
Только я не понимаю, зачем она нужна, если в $foo по-прежнему можно класть что угодно.
Вот, что я пытался сделать:
https://ideone.com/PDf3I5
> sub do_stuff {
> my Bar $instance = shift;
Но в $инстанс также попадает инстанс класса Foo. Я ожидал ошибку компиляции или исключение в рантайме на этом моменте, а случилось просто нихуя, как будто и не указывал я тип.

Я читал про use fields и это не то что мне надо, я всё равно не создаю классы вручную (есть Mojo::Base). Я хочу использовать это именно для валидации аргументов. Такое возможно? Если нет - имеются ли альтернативы, кроме костылей типа if ref $foo eq 'Bar'?
>> No.49288 Reply
>>49202
1. Нет

2. Нихуя не понел.

3.
> они умирают, как только навешивают свои коллбэки на луп
Потому что им больше нечего делать.
> Как сделать чтобы в каждом потоке было?
Это корутины, т.е. обычные функции с брейкпоинтами в некоторых моментах. На брейкпоинте происходит свитч на другую корутину из текущей. Потом, когда контроль возвращается обратно, выполнение начинается со стейтмента, следующего за спровоцировавшим свитч в прошлый раз. Ос-левел тредов при этом не создаётся и не нужно пытаться использовать этот констракт для одновременного выполнения нескольких неделимых блокирующих тасков, ничего не получится. См. metacpan://pod/threads для этого. Алсо google://preemptive+multithreading (threads) google://cooperative+multithreading (Coro).
Иллюзия параллелизма при помощи коры достигается посредством разбиения длинных тасков на небольшие быстровыполняемые части и постоянный свитч туда-сюда, обычно через Coro::AnyEvent::poll или Coro::rouse_функции. В итоге время с момента завершения первого таска до момента завершения последнего меньше, чем время, суммарно затраченное на выполнение какого-то одного из тасков. Из-за чего и появляется иллюзия, что всё выполнялось одновременно. Обычно это всё равно намного быстрее, чем делать всё по очереди, особенно если таски преимущественно состоят из I/O-операций с коллбэками и каких-то полутора быстрых, хоть и блокирующих, стейтментов между ними. Но параллельно более одного куска кода никогда не выполняется, это важно понимать.

4.
> Как работают все эти асинхронные эвент лупы
На каждой итерации лупа по очереди запускается всё то, что на него навешано и ожидает выполнения (коллбэки эвентов). На самом деле запускается оно не одновременно, а друг за другом. Просто очень быстро (для наглядности можно поставить sleep 9999 внутри одного из коллбэков и это парализует всю работу). Ещё мы не ждём I/O - повесили коллбэк и дальше выполняем стейтменты. https://en.wikipedia.org/wiki/Asynchronous_I/O


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]