LINUX.ORG.RU

(PragmaticPerl) Выпуск 27

 


0

0

Выпуск 27

В этом номере:

  • От редактора, Вячеслав Тихановский.
  • Отладка приложений на AnyEvent, Владимир Леттиев.
    Отладка асинхронных приложений часто затруднена из-за нелинейного характера выполняемого кода, когда ошибки проявляются под нагрузкой или в каких-то исключительных трудновоспроизводимых ситуациях. Привычные инструменты могут быть неудобны и неинформативны. Если приложение построено на основе AnyEvent, то для него уже существуют готовые рецепты отладки.
  • Операторы Perl 6. Часть 1, Андрей Шитов.
    Обзор префиксных, постфиксных и инфиксных операторов Perl 6
  • Метаоператоры в Perl 6, Андрей Шитов.
    Рассмотрены доступные в языке метаоператоры — операторы, расширяющие синтаксические возможности языка, используя другие операторы
  • Обзор CPAN за апрель 2015 г., Владимир Леттиев.
    Рубрика с обзором интересных новинок CPAN за прошедший месяц.
  • Интервью с Сюзанной Шмидт , Вячеслав Тихановский.
    Сюзанна Шмидт (sushee) — политолог, которая стала Perl-программистом.
★★★★★

Проверено: fallout4all ()
Последнее исправление: ymn (всего исправлений: 1)

Ответ на: комментарий от amix

booking.com с 2 MLoC и 50+ разработчиками смотрит на вас с недоумением.

anonymous
()
Ответ на: комментарий от anonymous

Хватит мусолить этот тупой пример. В «продакшене» так никто не пишет. Тупо потому, что $1 может быть undef. А print undef выплюнет просто варнинг, тогда как в «продакшене» это приведёт к дыре, в худшем случае.

Так что, правильно писать print «$1», раз. И два, в реальности выйдет все равно простыня вместо няшного-поняшного однострочника. На любом ЯП.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Хватит мусолить этот тупой пример. В «продакшене» так никто не пишет. Тупо потому, что $1 может быть undef.

Программистики боятся всего, даже print undef :-). Говорить за все случаи - это, кстати, дурная манера :-). Если код после регекспа принтит, то нет ничего страшного в print undef, важна корректность регекспа, а бояться print undef - это..к программистикам.

А print undef выплюнет просто варнинг, тогда как в «продакшене» это приведёт к дыре, в худшем случае.

очень внимательно вас слушаю каким образом print undef приводит к дыре :-)

Так что, правильно писать print «$1», раз. И два, в реальности выйдет все равно простыня вместо няшного-поняшного однострочника. На любом ЯП.

Потому что вы научились/привыкли программировать лишь так как привыкли и ничего другого не знаете? Так в противном случае вы бы не стали делать столь беспечные заявления и не стали бы говорить за всех («На любом ЯП»). Откровенно говоря, подобные манеры можно квалифицировать как отличительные черты «старых пе##унов», которые навязывают свой субъективный «жизнью прожитый» опыт, и выдавают его за единственно существующую правильность. Это так?

Тем не менее, есть ряд других техник программирования которые все же встречаются в продакшене, в некоторыех из них подобные «няшные» однострочники весьма уместны. Вы подобное либо не встречали никогда (что говорит про уровень вашей квалификации), либо подзабыли.

Вот я люблю perl в том числе и за то что он дает мне возможность свободно конструировать более пригодный код под конкретные задачи в теле некоторых из них «няшные» однострочники совсем не редкость.

На python, java, php и других языках некоторые конструкции реализуются очень бестолково, а некоторые вовсе нельзя реализовать напрямую (только обходными путями). Программируя на этих недоязыках я чувствую себя мудаком когда пытаюсь реализовать определенные схемы но начинаю городить обходную хрень потому что язык ущербный. И ничего подобного я не встречал с perl и си (и как следствие, на с++ тоже можно обходиться без обходных путей).

Теперь вы мне скажите зачем мне программировать на недоязыках в которых я встречаю проблемы с реализацией исполнения? Я по жизни выбираю лучшее, и когда-то перебирая ЯП в поисках лучшего, лучшими на деле оказались perl, си и с++. Я согласен что perl, си и с++ - не идеальны (особенно си и с++), но это пока самые вменяемые языки которые удовлетворяют моим требованиям к ЯП которые сформировались за годы программирования.

Думаю я достаточно подробно описал свою историю, и теперь вы мне расскажите конкретно что это за мой случай. Может я какой-то недопрограммист и не умею программировать «правильно» ? Но, я уже писал об этом, я умудраюсь успешно разбираться в коде чужих проектов и таких масштабных проектах как linux-ядро и perl-интепретатор.

anonymous
()
Ответ на: комментарий от anonymous

Лучшего ЯП не бывает. В чем лучший? Серебра больше?

Рекспы это не единственное, что важно в ЯП. А здесь взяли какой-то уж вообще примитивный пример и давай хвалить почем зря.

Говорил раньше и повторю снова, что в перле овер дофига проблем, которые либо есть, либо нет в других ЯП. Тот, кто видит в перле абсолютный идеал, на деле ничего и близкого к идеалу не создавал.

Я не стану разводить флейм, не стану говорить о проблемах, ведь их никто не любит. Не стану их говорить, чтобы оправдаться про мой личный профессионализм: да, я знаю, что ничего не знаю. Хотите узнать все плюсы и минусы любимого ЯП? Решайте задачи, ищите лучший вариант и может быть тогда истина о серебренной пуле откроется для вас.

:)

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

не стану говорить о проблемах,

давай же. что в этом дурного?

ведь их никто не любит.

причина тоже...

Deleted
()
Ответ на: комментарий от nempyxa

удобство набора меня интересует в меньшей степени, код пишется один раз, а читается - много раз. скобки и бегин/энд не люблю, по сути это лишние символы для чтения, это как слова-паразиты в речи, например, после каждой фразы говорить «мля» или «епт», вот примерно такое же ощущение

anonymous
()
Ответ на: комментарий от gh0stwizard

Лучшего ЯП не бывает. В чем лучший? Серебра больше?

Вот вы снова в роли демагога и начинаете лить воду. Конкретно про свой случай я вроде бы ясно дал понять:

но это пока самые вменяемые языки которые удовлетворяют моим требованиям к ЯП которые сформировались за годы программирования.

Рекспы это не единственное, что важно в ЯП. А здесь взяли какой-то уж вообще примитивный пример и давай хвалить почем зря.

Вот тут вы зачем пишете про общий случай о регекспах и ЯП? У нас есть конкретный пример в котором условием является поиск по регексу, поэтому очевидно что print undef не страшен, т.к. важна коррекстность регулярного выражения. Перестаньте лить воду.

Я кстати вам написал, но вы решили проигнорировать:

очень внимательно вас слушаю каким образом print undef приводит к дыре :-)

Рассказывайте, внимательно слушаю.

Говорил раньше и повторю снова, что в перле овер дофига проблем, которые либо есть, либо нет в других ЯП. Тот, кто видит в перле абсолютный идеал, на деле ничего и близкого к идеалу не создавал.

Вы наверное в это свято верите и молитесь по утрам. Вы мне скажите, кто говорил здесь про абсолютный идеал? Вы вообще читали что я писал? Или кому и на что вы отвечали?

Я не стану разводить флейм, не стану говорить о проблемах, ведь их никто не любит. Не стану их говорить, чтобы оправдаться про мой личный профессионализм: да, я знаю, что ничего не знаю. Хотите узнать все плюсы и минусы любимого ЯП? Решайте задачи, ищите лучший вариант и может быть тогда истина о серебренной пуле откроется для вас.

Да вы уже развели флейм:

- я вам про регексп в примере, а вы про регексп в ЯП вообще выдавая очевидное

- я вам рассказал свой случай каким образом оказалось что cи/c++ и perl попали в категорию наиболее пригодных к использованию языков, а вы «Лучшего ЯП не бывает» и «Серебра больше?»

- я вам пару вопросов сформулировал и просил предметно прокоментировать мой случай, но выдали ряд своих шаблонов мышления

Если вы и программист, то очень слабый, т.к. допустили очень много промахов прямо здесь в процессе разговора. По этомй причине я склоняюсь к мысли что вы просто демагог имеющий сильно опосредственное отношение к сколько-нибудь серьезной разработке систем. О себе скажу что за моим авторством есть специализированные программы успешно работающие на производстве уже много лет. Так что мне до вашего пустословия здесь на форуме..да вы даже предметно по примеру не ответили насчет print undef.

anonymous
()
Ответ на: комментарий от anonymous

удобство набора меня интересует в меньшей степени, код пишется один раз, а читается - много раз. скобки и бегин/энд не люблю, по сути это лишние символы для чтения, это как слова-паразиты в речи, например, после каждой фразы говорить «мля» или «епт», вот примерно такое же ощущение

Есть ощущение что вы просто не умеете разбираться в проектах и читать код. С таким «люблю/не люблю» может вам вообще бросить программирование и податься в менеджеры?

anonymous
()
Ответ на: комментарий от anonymous

я же выше писал что просто re.match(...) с последующей проверкой результата, это не менее лаконично и красиво, чем перловый вариант. и не противоречит Zen-у питона

anonymous
()
Ответ на: комментарий от anonymous

да нет, у меня нормально это получается, просто надоедает читать бесполезные символы. кстати, на моем опыте, да и на опыте многих знакомых фраза в описании вакансии «умение разбираться в чужом коде» означает на 99% примерно следующее - «у нас тонны говнокода, давайте к нам, будем костыли городить вместе с нами». так что уметь разбираться «в сортах говна» - это какое-то сомнительное умение. но если за это много заплатят, быстро разберусь, не переживайте. а вообще да, вы правы отчасти, я задумываюсь бросить программирование, получить другое образование, и заняться чем-то более творческим или прибыльным

anonymous
()
Ответ на: комментарий от Deleted

ну а почему тогда ни в одном яп не сделали в таком стиле?

lets define my_function()::::
=^..^= $begin of function$ =^..^= 
...
 тут какой-то код
...
=^..^= $end of function$ =^..^= 

привыкли бы, да тем более никто и не читает эти символы

anonymous
()
Ответ на: комментарий от anonymous

Да понял я, понял, что ты читаешь слова begin_end и скобки {} выделяющие блоки кода. И ты устал от этого. Надоело. Бесполезные символы, зачем они отвлекают твой взор? Лучше б их не было. Никакого творчества. Да и денег за это не платят.

Deleted
()
Ответ на: комментарий от anonymous

да нет, у меня нормально это получается, просто надоедает читать бесполезные символы.

Вы первый на моей памяти кто читает такие символы. Я наверное открою вам серкет, но разбор кода - это не чтение книги.

кстати, на моем опыте, да и на опыте многих знакомых фраза в описании вакансии «умение разбираться в чужом коде» означает на 99% примерно следующее - «у нас тонны говнокода, давайте к нам, будем костыли городить вместе с нами». так что уметь разбираться «в сортах говна» - это какое-то сомнительное умение. но если за это много заплатят, быстро разберусь, не переживайте. а вообще да, вы правы отчасти, я задумываюсь бросить программирование, получить другое образование, и заняться чем-то более творческим или прибыльным

посмотреть бы на ваши проекта, а так..плохому танцору и все такое..

anonymous
()

Сюзанна Шмидт (sushee) — политолог, которая стала Perl-программистом.

сенсация — плохой политолог и плохой программист )))

chg ★★★★★
()
Ответ на: комментарий от anonymous

что характерно, «нечитаемый» код однозначно потребует разбора, раз прочитать не удалось, а читаемый - легко прочитается, на то он и «читаемый».

анонимус не может показать свои проекты, иначе он не анонимус

anonymous
()
Ответ на: комментарий от gh0stwizard

Я как-то был на собеседовании в DrWeb ( у них сайт на perl написан). На мой вопрос «используете ли вы какой-нить фреймворк типа Catalyst» сделали круглые глаза и спрятались под стол. :)

Jopich
()
Ответ на: комментарий от anonymous

что характерно, «нечитаемый» код однозначно потребует разбора, раз прочитать не удалось, а читаемый - легко прочитается, на то он и «читаемый».

Удивительная игра слов. Я не очень понимаю как вы там барахтаетесь, но я код не читаю - лишь разбираю его. Я вообще никакого смысла не вижу читать код. Вообщем..я лишь снова убедился что вы не умеете разбирать код. Как руководитель проекта я бы воздержался от того чтобы вас брать в свою команду.

анонимус не может показать свои проекты, иначе он не анонимус

конечно - поэтому я написал «посмотреть бы», да только нормальный анонимус не станет писать такое: "... скобки и бегин/энд не люблю, .." :)

anonymous
()
Ответ на: комментарий от anonymous

Я не услышал внятного ответа почему perl лучше, чем скажем java. Вот вы пишете:

На python, java, php и других языках некоторые конструкции реализуются очень бестолково, а некоторые вовсе нельзя реализовать напрямую (только обходными путями). Программируя на этих недоязыках я чувствую себя мудаком когда пытаюсь реализовать определенные схемы но начинаю городить обходную хрень потому что язык ущербный. И ничего подобного я не встречал с perl и си (и как следствие, на с++ тоже можно обходиться без обходных путей).

Какие конструкции?

Видите ли, если вас заботит только как выглядит код, то для вас плохие новости. Я не стану цитировать Торвальдса о хороших программистах, гуглите сами.

Теперь о дыре в print undef. Вообще-то, я имел ввиду использование $1 вместо "$1" там, где это неверно. Теперь вашими же словами: если вы и программист, то очень слабый, т.к. сильный программист знает об этой «фишке» perl, знает что выдаст print в этом случае, знает, что произойдет в его личном коде. Поскольку личного кода тут нет, а команда print сделана практически идеально, то вот вам пример в вашей стилистике:

#!/usr/bin/perl -wl

($test = "tt") =~ /^\w(\w+)?\w+/ && print ($1) && print "'$test' authorized";
http://ideone.com/8MMftA

В рекспе есть ошибка, чтобы специально показать, когда $1 может быть undef. Поскольку пример очень простой, то сразу видно, где именно. В более сложных регепсах это обычно бывает трудно заметить сразу, трудно определить при каком входном значении получим undef. Как итог, злоумышленник может провести атаку, которая в худшем (ключевое слово) приведет к дыре. В лучшем случае, к неверной работе программы.

И сразу скажу, что пример не показывает, где уязвимость и как ее использовать. Могу сказать, что если в коде начать использовать $1 таким образом $users{ $1 }, то будет уже интереснее, но опять же пример взят с потолка.

Теперь вернемся к вашему примеру:

($test = "test") =~ /^(.*?)t/ && print $1;
Как видно, он не работает. От слова вообще: http://ideone.com/Vr7PCM

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от gh0stwizard

почему perl лучше, чем скажем java

Реализуй мне на жаве класс с полным набором аксессоров, строящихся в рантайме в зависимости от caps, которых выдал сервер. Вот пример. Здесь это заняло 150 строк. В сколько килострок и файлов ты уложишься на жабе, если вообще осилишь задачу?

Жаба проектировалась для использования дешёвыми взаимозаменяемыми идиотами. Тот кто пытается это отрицать - тоже из них.

anonymous
()
Ответ на: комментарий от anonymous

Вот пример.

хороший пример того, насколько perl неудобен для чего-нибудь, кроме нечитаемых однострочников - в этом ему равных нет

anonymous
()
Ответ на: комментарий от anonymous

Только в твоём воображении, monkey.

anonymous
()
Ответ на: комментарий от anonymous

В сколько килострок и файлов ты уложишься на жабе, если вообще осилишь задачу?

Сколько заплатишь? Или ты думаешь, что раз ты не осилил это сделать, то никто не осилит?

Жаба проектировалась для использования дешёвыми взаимозаменяемыми идиотами. Тот кто пытается это отрицать - тоже из них.

Пока, фанатик :)

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Это я разговаривал с вами, предыдущие анонимы - другие.

Я не услышал внятного ответа почему perl лучше, чем скажем java. Вот вы пишете:

Вы услышали в обобщенной форме ровно на столько, на сколько я готов был раскрыть детали. Этого должно быть достаточно чтобы прокоментировать мой случай. Деталей не ждите - я не собираюсь вас обучать тому что вы не знаете.

Какие конструкции?

Исполнительные, реализующие логику.

Видите ли, если вас заботит только как выглядит код, то для вас плохие новости. Я не стану цитировать Торвальдса о хороших программистах, гуглите сами.

Если бы вы соотнесли то что я сказал ранее о том что использую и разбираюсь в си,с++ и perl-коде крупных проектов в том числе, то поняли бы что дело совсем не в том как выглядит код. До синтаксиса и внешнего вида почти фиолетово, но то что perl позволяет по ситуации представить код в той или иной форме - это тоже плюс.

Теперь о дыре в print undef. Вообще-то, я имел ввиду использование $1 вместо «$1» там, где это неверно. Теперь вашими же словами: если вы и программист, то очень слабый, т.к. сильный программист знает об этой «фишке» perl, знает что выдаст print в этом случае, знает, что произойдет в его личном коде. Поскольку личного кода тут нет, а команда print сделана практически идеально, то вот вам пример в вашей стилистике:

И сразу скажу, что пример не показывает, где уязвимость и как ее использовать. Могу сказать, что если в коде начать использовать $1 таким образом $users{ $1 }, то будет уже интереснее, но опять же пример взят с потолка.

Я думал что-то серьезное, фатальное и фундаментальное скрыто за print undef, а оказалась безынтересная унылая ерунда. То что вы пишете - это чушь в сторону которой вы передернули разговор чтобы избежать все темы и вопросы которые я вам поставил. Мало того что вы раздули из мухи слона, так вы еще причины списываете на perl тогда как вы приводите пример за который нужно бить по голове программиста. Вообщем на деле оказывается что у вас ничего нет, ну а позицию «против perl» вы пытаетесь построить через публикацию некорректного кода, который пишется недопрограммистами. Я допускаю что вы просто пытаетесь оправдать себя чтобы не вляпаться в категорию недопрограммистов. Я ведь не зря сфокусировал внимание на корректности регекспа, а вы дальше продолжаете слабо связанный флейм.

А теперь обстоятельство которое отлично показывает нам слабость вашего интеллекта:

1) я просил вас рассказать о дыре в print undef и вы поняли что я просил так как написали это

о дыре в print undef. Вообще-то, я имел ввиду использование $1 вместо «$1» там, где это неверно

2) а следом вы, понимая что я ожидаю детали о дыре в print undef и вы имели ввиду другое пишете это:

если вы и программист, то очень слабый, т.к. сильный программист знает об этой «фишке»

Вы заявляете что я слабый программист и вас нисколько не смущает то что я ожидал одно, а вы имели ввиду другое :) Это такой «синдром блондинки» во всей красе или что?

От вас в очередной раз демагогия (как и в прошлый раз когда мы с вами пересеклись в теме связанной с perl). Время прошло, а ваше топорное мышление так и не изменилось со временем (да и качество также оставляет желать лучшего). Perl - это инструмент не для вас, не для старперов.

anonymous
()
Ответ на: комментарий от anonymous

Это я разговаривал с вами, предыдущие анонимы - другие.

Да, как всегда набежали анонимусы и фиг разберешь вас :)

Я ведь не зря сфокусировал внимание на корректности регекспа

Ваш регепс не работает. Причем он был некорректный в изначальной форме, а вы не удосужились его проверить. Да даже проверить насколько хорошо вы помните поведение greedy.

2) а следом вы, понимая что я ожидаю детали о дыре в print undef и вы имели ввиду другое пишете это:

И? Так бывает, люди криво формулируют мысли, а некоторые вообще не понимают, что говорят другие. Я исправился, а претензии от вас так и сыпятся.

Perl - это инструмент не для вас, не для старперов.

Да-да. Когда ваши проекты будут переписывать на пистоне, а вас сошлют куда подальше, вспомните кто старпер :)

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от gh0stwizard

Да, как всегда набежали анонимусы и фиг разберешь вас :)

Да, я думаю вам сложно отличить одного анонимуса от другого.

Ваш регепс не работает. Причем он был некорректный в изначальной форме, а вы не удосужились его проверить. Да даже проверить насколько хорошо вы помните поведение greedy.

Важно понимать что это не мой регекс ровно как и то что пример этот не мой вовсе. Соответсвенно, корректен или нет регексп - надо спросить автора, т.к. только из этого синтетического примера не ясно корректен или нет. Ладно, не буду дальше раскрывать мысль (хотя подразумевалось нечто большее), так что смело думайте дальше в рамках этого синтетического примера. А вы продолжайте меньше вникать и больше фантазировать.

И? Так бывает, люди криво формулируют мысли, а некоторые вообще не понимают, что говорят другие. Я исправился, а претензии от вас так и сыпятся.

Вы заявили что я слабый программист, хотя до этого ранее вы сами сказали что подразумевается. У вас с головой проблемы. Да и плевать я хотел на ваши извинения.

Да-да. Когда ваши проекты будут переписывать на пистоне, а вас сошлют куда подальше, вспомните кто старпер :)

Вот вы снова не подумали о том что я сам решаю кого и куда послать подальше. Переписывать проекты никто не будет, т.к. с неосиляторами которые предпочитаем не связываться. Из практики скажу что если человек не может разобраться в коде на perl, то обычно он и подавно не может разобраться в сложном коде на JavaScript, C++ и коде с обильным использованием макроопределении на си. Я почти уверен что такие как вы никогда не видели сложный код на том же JavaScript и с++.

anonymous
()
Ответ на: комментарий от gh0stwizard

gh0stwizard, прошу прощения, что вмешиваюсь, но по крайней мере несколько Ваших высказываний неверны.

Пример кода, к которому Вы прицепились, работает по плану. Печатает пустую строку. Я бы, правда, посоветовал для универсальности использовать «and» вместо «&&», если так хочется избежать «if». То есть:

perl -e '"test" =~ /^(.*?)t/ and print "[$1]\n"'

Нет никаких проблем использовать $1 в коде, в который попадаешь лишь при срабатывании заранее известного регекспа; в данном случае $1 никогда не может быть undef. Поэтому, вовсе непонятен Ваш пассаж про продакшн.

mihalych ★★★
()
Последнее исправление: mihalych (всего исправлений: 1)
Ответ на: комментарий от gh0stwizard

Теперь о дыре в print undef. Вообще-то, я имел ввиду >>использование $1 вместо «$1» там, где это неверно. Теперь >>вашими же словами: если вы и программист, то очень слабый, т.к. сильный программист знает об этой «фишке» perl, знает >>что выдаст print в этом случае, знает, что произойдет в его

($test = "tt") =~ /^\w(\w+)?\w+/ && print ($1) && print "'$test' authorized";

Не несите чушь.

print $1 или print «$1» в обоих случаях выдаст одно и тоже, то есть нифига, и вернет true, если STDOUT не закрыть например. А perl в обоих случаях выдаст соответствующие варниги, если они включены.

Либо я не понял, что тут смущает. В примере проблема не в undef и $1, а в кривом регекспе. Так что perl молодец.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.