LINUX.ORG.RU

Perl мертв. Да здравствует Perl!


0

0

JT Смит, президент Plain Black, создатель WebGUI, и однин из незамеченных, но успешно использующих Perl в бизнесе, недавно послал мне это эссе. Он дал мне(O'Reilly) разрешение издать это полностью здесь.

Каждый день, я задумываюсь о том, почему я пишу на Perl а не на PHP, Java, C#, Ruby, Python, или [подставте ваш любимый язык сюда]? Люди говорят что, "Perl не используется больше" или, "Рубин - рулез..."

Есть миллионы программистов Perl во всем мире. Perl 5 активно поддерживается, и Perl 6 находится в развитии. Больше чем 3000 Модулей Perl были выпущены в 2006г, и вдвое больше должны быть выпущены в этом году. Действительность состоит в том, что Perl является совсем не мертвым.

>>> Взято с сайта =>



Проверено: Shaman007 ()

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

> Ок, есть задача например: зайти на http://namescout.com/, авторизироваться, пройтись по списку доменов

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

Если непременно надо делать самому, то twill. Если же, не дай б-г, сайт написан криво и твилл развалится - то чистый python + BeautifulSoup.

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

>локаль в утф переключи, баклан %)

Отлично: а теперь приедставь себе, что ты - японец и русского алфавита не знаешь.

Сложно представить? Ну так посмотри пример здесь: http://www.linux.org.ru/jump-message.jsp?msgid=2068951&cid=2071258

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

>>> Почему то не приводят конкретную задачу под что выбирается язык, и складывается ощущение что тут в основном тусят какие то недобыдломенеджеры а не кодеры даже, ибо крайне популярен лозунг "мне некогда учить язык, мне надо пЕсать сейчас", видимо проектировать им тоже некогда, прежде чем писать на чем либо, результат мы все видим в виде современного ит - куда ни плюнь, кругом полно некомпетентного говна которое порождает хаос и анархию, апокалипсис грядет, конец близок.

апокалипсис, гришь? неужели уже спирт не помогает? :)))

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

>Так вот, дорогие любители уникода в порграммном коге: убейте себя об стену, да.

А кто его внутри юзает то ? все на eng пишут.

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

>А кто его внутри юзает то ? все на eng пишут.

Ну как жеж... только что кое-кто предлагал математикам писать все в utf8 :)

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

>Отлично: а теперь приедставь себе, что ты - японец и русского алфавита не знаешь.

Но речь же шла о возможности, а не о том что я могу не знать русского или японского, или ? Ну а если кто пишет на японском или русском названия функций - то он сам себе злой буратино (или ему не нужно что бы это кто-то читал, хотя на английском все равно привычнее как то)

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

> По поводу высказывания 90% задач на 90% в работе с текстом - самый простой пример для вас - веб приложения или ЛОР.
> Необходимо принять ТЕКСТОВЫЙ запрос

...который принять лучше всего может только perl...

> состоящий из ТЕКСТОВЫХ полей.

Ой, а раз есть поля, то парсить ничего не надо? А жаль, ведь так хотелось ;-)

> Далее обработать эти ТЕКСТОВЫЕ значения,

Ага, прям в поте лица шлифовать напильником.

> сделать ТЕКСТОВЫЙ запрос к базе,

... и никто не сравнится в этом искусстве с перлом!

> получить ТЕКСТОВЫЕ данные

... и никто не сравнится в этом искусстве с перлом!

> и составить ТЕКСТОВЫЙ хтмл ответ.

Ай, а вот это лишнее! Зачем останавливаться? Давайте ещё чо-нить обработаем, пропарсим, примем, сделаем запрос?

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

> Да будет Вам известно, что на Perl написано очень много весьма больших систем, например: SpamAssassin, Nagios, MRTG, OpenWebMail, 4Site, Bugzilla, TWiki... Это первое, что вспомнилось без Googlа!

Google всё-таки желательно задействовать, чтобы узнать о том, что почти все указанные системы имеют уже имеют более качественные аналоги, написанные на других языках.

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

> Поэтому что Питон, что Перл, что С - разницы особо никакой (при прямых руках).

ЧТД, никаких хваленых текстовых преимуществ у перла нет. А все остальное он и так делает хуже, чем другие.

Кстати, а че половина постов пропала?

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

>Google всё-таки желательно задействовать, чтобы узнать о том, что почти все указанные системы имеют уже имеют более качественные аналоги, написанные на других языках.

livejournal захаять забыли %)

>ЧТД, никаких хваленых текстовых преимуществ у перла нет. А все остальное он и так делает хуже, чем другие.

Узнается подчерк месье который привык рисовать в дельфи формочки %)) Такого уже ничем не проймешь %)

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

> > Спроектируй, реализуй, стабилизируй, популяризируй язык который перекрывает перл в его нише

> sed? awk?

Кстати, да... Тут вот активно пиарят perl как лучший инструмент для обработки текста, а ведь он и рядом не стоял по удобству с awk!

Awk - это единственный True инструмент для обработки текстов.
Perl - это язык-клей, изначально задуманный для сшивания shell-скриптов, и этим всё сказано.

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

> Ок, есть задача например: зайти на http://namescout.com/, авторизироваться, пройтись по списку доменов, ну и скажем по некоторым признакам что-нибудь с ними сделать в админке этой, например продлить, или выслать емейл администратору, или флаг какой нить поставить, т.е. типичная задача автоматизации веб рутины, на чем ты такое будешь писать ?

Php для таких дел идеален. Именно для автоматизации веб -рутины.

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

> Кстати, а че половина постов пропала?

Потому что движок на Java написан (кажется тут кто-то такое заявлял) :)

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

>ЧТД, никаких хваленых текстовых преимуществ у перла нет. 
>А все остальное он и так делает хуже, чем другие.

#!/usr/bin/perl

my $test="nick00: пппппрррррииивеееет !!!!!\n";
sub  cut_block {
        my ($str,$maxlen) = @_;
        $str=~ s/(.*?)\1{$maxlen,}/$1/g;
        return $str;
}
print cut_block($test,2);

уважаемые phpводы (ну и заодно пистоно), приведите плиз аналог функции этой,
мне очень надо (в один проект написанный пыхпыхбыдлокодером вставить). Я не издевки ради, а правда, интересно

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

>>Php для таких дел идеален. Именно для автоматизации веб -рутины.

месье очень хорошо и цинично пошутил, да ? %))

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

>Я рассуждал об удобстве, а не о новых горизонтах перед математиками, если >абстрагироваться еще более, об удобстве программирования ВООБЩЕ, а не в >конкретно в Perl. Например, для меня намного удобнее выглядит запись

>($a, $b) = ($b, $a);

>чем, например

>int tmp = a; a = b; b = tmp;

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

>Только люди, оперирующие понятиями синтаксиса Паскаля, Си и т.п. не поймут >первую запись, поскольку скованы рамками своего кругозора, и очень часто >отказываются изучать что-либо новое.

Звучит, как будто перл - единственный скриптовый язык и центр галактики, а все остальные периферийные программисты, пишущие на "Паскале, Си и т.п." просто не способны понять красоту Их Величества.

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

> print cut_block($test,2);

Уважаемый быдлоперлокодер, а не спасёт ли тебя банальная функция substr() в данном случае? И огород не надо городить, и читается много лучше...

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

> Узнается подчерк месье который привык рисовать в дельфи формочки %)) Такого уже ничем не проймешь %)

Друже, для личных наездов надо иметь хоть какие-то основания. А ты, похоже, считаешь, что критиковать перловские "достижения" могут только те, кто пользуется еще более тупыми средствами? Не вижу смысла мерятся пиписьками, рассказывать в каком году я применял, например, метапрограммирование на практике, но это было задолго до Perl 1.0 :) Так что все эти "фичи" перла смешны. Можно похвалить, конечно, как ребенка хвалят за его каракули, но для взрослого это уже смешно

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

>Уважаемый быдлоперлокодер, а не спасёт ли тебя банальная функция substr() в данном случае? И огород не надо городить, и читается много лучше...

ты не увиливай таки %) Я пример привел, естественно что там вместо приииветааа может быть произвольная строка с произвоольным кол-вом повторений. Ок, сделай решение на substr(), тоже будет интересно

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

>Друже, для личных наездов надо иметь хоть какие-то основания. А ты, похоже, считаешь, что критиковать перловские "достижения" могут только те, кто пользуется еще более тупыми средствами?

Для личных мотивов не нужны основания, а критикуют перл обычно именно те кто юзает более тупые средства, иные помалкивают по очевидным причинам %) (метать бисер перед свиньями смысл каков ?)

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

>Уважаемый быдлоперлокодер, а не спасёт ли тебя банальная функция substr() в данном случае? И огород не надо городить, и читается много лучше...

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

Я сильно так отстал от жизни, да ?

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

> Сначала про си шарп в институтах, теперь вот это... %-(

Регекспы в DNF кстати есть. И еще в C# 3.0 функциональщины заметно добавлили. Это к тому, что врага надо знать в лицо.

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

#! /usr/bin/env python
# -*- encoding: utf-8 -*-
import re

def remove_dupes(s, n):
    return re.sub(r'(.+?)\1{%d,}'%n, r'\1', s)
    
test=u"nick00: пппппрррррииивеееет !!!!!\n";
print remove_dupes(test, 2).encode('utf-8')

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

> Так можно делать в любом заслуживающем внимания скриптовом языке - даже если язык "так себе" - и к математике не имеет никакого отношения.

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

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

10x за питон, но надо бы на пхп все таки. (не буду же я вставлять одну строку регэкспа на перле или питоне в пхп проект %-(

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

> не отвалилось ли чего при нахождении красноглазыми хаккерами очередной критической уязвимости в перле? Или апачу вставлять mod_perl, который способен поставить раком полсистемы в случае чего?

яндекс что-то раком не становится

а по-поводу уязвимостей в Perl'e -- это такой редкий зверь, что раз в год обновиться не проблема.

Вот поддерживающим сайты на пых-пыхе я не завидую

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

> уважаемые phpводы (ну и заодно пистоно), приведите плиз аналог функции этой,

Ты наверно думаешь, что регекспы только в Перле имеются :)

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

> На лор-е есть такая весьма распространненая порода обитателей, скажу я вам, которая, подобно мальчикам, которые кидают "какашками" в понравившуюся им особь противоположного пола, пытаются унизить собеседника путем грубости, либо откровенного 4.2 в надежде на то, что им дадут ответ на интересующий их вопрос, в котором они совершенно не разбераются. Почему бы просто не спросить, как взрослые?

дядя, а куда лучше?

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

> Слушай, но тут фактически одна строка с крайне примитивным регэкспом

Да, ты прав. Регексп будет тот же, просто переменную в него втыкать нельзя. Можно так:
$str= preg_replace('/(.?)\1{'.$maxlen.',}/','$1', $str);

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

> А уж какую радость составляют проекты на CPAN, где разве что перловая скриптизация КДЕ отсутствует - это ж словами не описать.

для KDE3 -- входит в состав perlQt-3 самой последней версии, которой на CPAN'е нет

и для KDE4 -- будет ;)

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

> для KDE3 -- входит в состав perlQt-3 самой последней версии, которой на CPAN'е нет

Самая последняя версия - это какая? Оно ведь умерло года три назад кажись. Или я отстал от жизни?

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

>> Поэтому что Питон, что Перл, что С - разницы особо никакой (при прямых руках).

>ЧТД, никаких хваленых текстовых преимуществ у перла нет. А все остальное он и так делает хуже, чем другие.

Анонимус, обучись не выдергивать фразы из контекста, не будешь выгдялеть дураком.

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

> Все эти и многие другие фичи ваши игрушечные языки тащат (в большей и меньшей степени удачно) из лиспа. Только в лиспе они существовали уже давно, и лисп умудряется реализовывать их все не в тормозных интерпретаторах, а с оптимизирующей компиляцией в машинный код (после чего становится смешно, когда начинают меряться скоростью: "питон тормозит всего в 1000 раз по сравнению с С, а перл в 2000" - бугага-с.

Да ну?

http://norvig.com/python-lisp.html

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

> На жабе и работает ЛОР.

Да-да-да, и мы все помним, как..

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

> Да ну? http://norvig.com/python-lisp.html

А что? > execution time is much slower than Lisp, often by a factor of 10 (sometimes by 100 and sometimes by 1). Qualitatively, Python feels about the same speed as interpreted Lisp, but very noticably slower than compiled Lisp.

Обратите внимание, питон написан на С. Поэтому когда программа на питоне (перле и пр.) просто представляет собой последовательность вызовов сишных подпрограмм, то это и будет фактор 1–10. Напишите что-то нетривиальное, будет 100-1000.

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

> Перл не проходит проверки на универсальность

Глупости. Проходит и с полным успехом (один из самых универсальных языков, поддерживающий большинство парадигм программирования). Кто же виноват, если ты не освоил всех его возможностей. Ещё не поздно освоить.

> Поэтому считаю нужным перл давить и гонять. Я им не пользуюсь, но сам факт его существования рядом со мной - создаёт чувство дискомфорта.

Если учесть, что Перл предоставляет не меньше (а если рассматривать высший пилотаж, то больше) возможностей, чем твой любимый Питон, то придётся по твоей логике давить именно Питон. Это всё твои комплексы и нежелание выучить язык на таком уровне, чтобы писать кристально читабельный и оптимальный код. Есть такое мнение, что бриллиантовый программист на любом языке будет писать исключительно бриллиантовые программы, а уж тем более на одном из богатейших по возможностям языке. Может просто тебе природой не дано? В любом случае, твои комплексы и незнание не дают тебе право испражняться повсюду. Ну, пришёл и испражнился, тебе стало менее дискомфортно?

> В мире Open Source есть такая розовая мечта - чтобы программировали ВСЕ. А перл эту мечту убивает, ибо язык тяжёлый

Это утверждение не менее абсурдно, чем следующее. В научном мире есть такая розовая мечта, чтобы научные открытия делали ВСЕ, а наличие университетов убивает эту мечту, так как обучение в них тяжёлое.

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

учи матчасть прежде чем газифицировать лужи

это перл перекрывает sed и awk, но не наоборот.

tesla
()

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

# ====
a1 = [2, 5, 7, 3, 8, 0, 2]
a2 = [3, 5, 3, 8, 9]

class Continue(Exception):
    pass

for i in a1:
    try:
        for j in a2:
            print 'j =', j
            if i>j:
                raise Continue()
    except Continue:
        print 'ups.. %s > %s' % (i, j), 'continuing..'
        continue
    print 'End of outer cycle for i =', i
# ====
Или же можно так:

for i in a1:
    try:
        for j in a2:
            print 'j =', j
            if i>j:
                raise Continue()

        print 'End of outer cycle for i =', i    
    except Continue:
        print 'ups.. %s > %s' % (i, j), 'continuing..'

Таким способом, можно выйти практически из цикла любой вложенности, просто нужно те вложенные циклы окружить в raise-except на том уровне,
куда планируется выходить.

@mihalych
>Если учесть, что Перл предоставляет не меньше (а если рассматривать
высший пилотаж, то больше) возмозностей, чем твой любимый Питон

интересно, где же больше и какой пилотаж имеется в виду?

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

>интересно, где же больше и какой пилотаж имеется в виду?

например смена перечня родительских классов объекта налету

в перле такое довольно несложно сваять

только не надо сразу уходить в область "зачем это может понадобиться"

вполне может, для создания разнообразных рестриктед ареав например

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

> слава Ктулху хоть дельфи сдох наконец вроде, одним убожеством меньше...

не сдох, Borland выпустила дельфу для php -- быдло для быдла -- ОНИ НАШЛИ ДРУГ ДРУГА!!! УРА, ТОВАРИЩИ!!!

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

> например смена перечня родительских классов объекта налету

#! /usr/bin/env python
class y:
    yvar = 'y'
class z:
    zvar = 'z'
class x(y):
    xvar = 'x'
    def change_base_to_z(self):
        print self.__class__.__bases__
        self.__class__.__bases__ = (z,)

xx = x()
xx.change_base_to_z()
print xx.zvar

Теперь потрудитесь показать как это делается в быдлоперле.
А я добродушно посмеюсь над вашими закорючками.

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

> Видишь ли, не у всех хватает времени и терпения освоить КУЧУ инструментов.

Кому не хватает времени, идут в дворники.

> Перл не проходит проверки на универсальность - вне своего маленького мирка (быстрый парсинг текстов) он довольно-таки неуклюж и для освоения труден.

У меня есть проекты на 7-8 тыщ строк на Perl, с демонизацией процессов, распараллеливанием сетевых действий, работой с SQL и текстами -- мне подходит. А есть проект, где я прототип взялся делать на Perl, а теперь выясняется, что переделывать времени просто нет, и 4000 строк переписывать просто некогда, что сейчас надо срочно доделать часть, которую надо было показать ещё несколько месяцев назад. И в данном случае, Perl, как инструмент для написания _этой_ задачи, на самом деле не подходит, многое там выглядит неудобно, много математики и сложных структур данных. Но это _моя_ ошибка, а не языка.

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

>> print cut_block($test,2); > Уважаемый быдлоперлокодер, а не спасёт ли тебя банальная функция substr() в данном случае?

substr умеет резать повторения любой сложности? и 'ааа' и 'developers developers developers !!!' одновременно сможет обработать?

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

> многое там выглядит неудобно, много математики и сложных структур данных.

А вот Питон подошел бы _и для этого_ :)

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

>> для KDE3 -- входит в состав perlQt-3 самой последней версии, которой на CPAN'е нет

> Самая последняя версия - это какая? Оно ведь умерло года три назад кажись.

да, потому до CPAN'a и не доехало

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

>#! /usr/bin/env python
>class y:
>    yvar = 'y'
>class z:
>    zvar = 'z'
>class x(y):
>    xvar = 'x'
>    def change_base_to_z(self):
>        print self.__class__.__bases__
>        self.__class__.__bases__ = (z,)

>xx = x()
>xx.change_base_to_z()
>print xx.zvar

#!/usr/bin/perl
package y;
что-то в y;

package z;
что-то в z;

package x;
чего-то много в z;

package main;

$xx = x();
...
print $xx->zvar;

отступы поменялись на ';'





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

> А я добродушно посмеюсь над вашими закорючками.

Смейся: @X::ISA = ('Z');

Полный пример (можно запустить perl и сделать туда copy-paste, чего не сделать с python):

package Y; sub yvar { 'y' }
package Z; sub zvar { 'z' }
package X; @ISA = ('Y'); sub change_base_to { @ISA = @_; }

package main;
$xx = bless {}, "X";
print $xx->yvar;
$xx->change_base_to("Z");
print $xx->zvar;

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

А вот такого, например, Python не умеет:

sub UNIVERSAL::zvar { 'z' }
$x = bless [], 'X';
print $x->zvar;

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