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 ()

Ответ на: Re: Perl мертв. Да здравствует Perl! от sv75

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

А вот еще задачка вывести на печать массив без повторяющихся в нем элементов:

print join "," => grep {!$_{$_}++} @mass;

это можно так-же коротко сделать в питоне?

vilfred ☆☆ ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от xargs

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

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

Запросто:

# ==== class A(object): def say(self): print 'Hello',

class B(object): def say(self): print 'world!'

obj = A() obj.say() obj.__class__ = B obj.say() # ====

Вывод:

Hello world!

И еще по разному извратиться можно:

# ==== class A(object): def say(self): print 'Hello',

class B(object): def say(self): print 'world!'

class C(object): def sayC(self): print 'Say from C'

def test(): o = A() class _tmpClass(A, B, C):pass

o.__class__ = _tmpClass o.say() B.say(o) o.sayC()

test() # ====

Вывод:

Hello world! Say from C

xonix ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от xargs

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

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

Запросто:

# ====
class A(object):
    def say(self):
        print 'Hello',

class B(object):
    def say(self):
        print 'world!'

obj = A()
obj.say()
obj.__class__ = B
obj.say()
# ====

Вывод:

Hello world!

И еще по разному извратиться можно:

# ====
class A(object):
    def say(self):
        print 'Hello',

class B(object):
    def say(self):
        print 'world!'

class C(object):
    def sayC(self):
        print 'Say from C'

def test():
    o = A()
    class _tmpClass(A, B, C):pass

    o.__class__ = _tmpClass
    o.say()
    B.say(o)
    o.sayC()

test()
# ====

Вывод:

Hello world!
Say from C


xonix ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от vilfred

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

> А вот еще задачка вывести на печать массив без повторяющихся в нем элементов

Можно, причем на порядок понятнее

>>> a = [1, 1, 2, 0, 1, -1, "hello", "world", "hello"]
>>> print ', '.join(map(str, set(a)))
0, 1, 2, world, hello, -1

anonymous ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от anonymous

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

ok, а например убрать повторения подстрок(например цифры) из массива?

print join "," => grep {!$_{$1}++ if /^.*?x(\d)x.*?$/} @mass;

vilfred ☆☆ ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от vilfred

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

> ради исскуства =)

тогда уточни задание - все _последовательные_ элементы схлопываются в один? или вообще все?

[1, 2, 2, 3, 4, 3, 5] => ...?

tailgunner ★★★★★ ()
Ответ на: удаленный комментарий

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

> # change class of object $x from X to Y

> bless $x, 'Y';

что интересно, в самом перле это прекрасно работает, вот если такое делать в XS, то при print $x; можно получить 'X::Y::SCALAR(0xQWQWQWQW)'

т.е. на С такой проверки не делает

vadiml ★★★★★ ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от vilfred

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

>ok, а например убрать повторения подстрок(например цифры) из массива? >print join "," => grep {!$_{$1}++ if /^.*?x(\d)x.*?$/} @mass;

можно по-русски, че надо-то сделать, а то перл трудно выкупать?

xonix ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от xonix

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

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

Собственно я к чему, "легким движением руки" функции строки меняется из одного в другое, т.е. как бы удобство чтоли.

vilfred ☆☆ ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от vilfred

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

> print join "," => grep {!$_{$1}++ if /^.*?x(\d)x.*?$/} @mass;

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

Hjorn ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от anonymous

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

> Можно, причем на порядок понятнее > [1, 1, 2, 0, 1, -1, "hello", "world", "hello"] > 0, 1, 2, world, hello, -1

Так ведь неверная это имплементация. Оригинальный порядок потерян.

mihalych ★★★ ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от vilfred

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

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

Говори по-русски. Твои косноязычные задания не ясны.

Ты что, хочешь доказать что в перле можно сооружать нечитаемые однострочники? Да с этим никто не спорит конечно.

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

yk4ever ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от Hjorn

Re: Perl мертв. Долгой жизни Perl...

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

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

По сути мои задачи (администрирования, автоматизации) мне удобно решать на перле, ибо он есть везде, он не кривой, не глючит, не дырявый, есть дохера готовых решений на цпане, и сам язык очень гибкий, красивый и функциональный, на нем просто приятно писать. А еще приятно смотреть через год на код который ты написал, и сокращать его вдвое %)

Тут кто-то про идеологию выпытывал, имхо идеология перла - быстрое ленивое программирование. А узнавая его глубже наступает просветление, знаешь в каком я был воссторге когда прочитал про то что дает my $a = $b % $c; :-) Просто приятный синтаксис, за что, за что вы его так ненавидите, это же божественно %) Недаром лингвист писал %)

anonizmus ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от yk4ever

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

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

Это смотря какой код. И уже писали тут - если ты пишешь регулярно на перле то и однострочники эти читаются легко, меньше информации на экране (символьной) - проще парсить мозгу %)

anonizmus ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от mihalych

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

> Так ведь неверная это имплементация. Оригинальный порядок потерян.

print ','.join(str(x) for i,x in enumerate(mass) if mass.index(x)==i)

yk4ever ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от mihalych

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

> Так ведь неверная это имплементация. Оригинальный порядок потерян.

Да, Перл крут для однострочных конструкций - которые понять нормальным людям невозможно. Да, нету в Питоне $_ etc. Зато код можно понять без спирта даже.

sv75 ★★★★★ ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от anonizmus

Re: Perl мертв. Долгой жизни Perl...

> Просто приятный синтаксис, за что, за что вы его так ненавидите, это же божественно %) Недаром лингвист писал %)

это наверное единственный язык, который разработал лингвист.

я так прикидывал, питон с перлом можно сравнивать как английский с русским: В английском очень строго прописано где существительное, где сказуемое, где вспомогательные части речи, чётко приписано где в каком предложении какая интонация должна быть. В русском же можно слова менять, переставлять, выделять смысл только интонацией, но всё равно весь язык подчиняется правилам, т.е. язык сложнее, но и позволяет больше.

vadiml ★★★★★ ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от mihalych

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

> Так ведь неверная это имплементация. Оригинальный порядок потерян.

Да, Перл крут для однострочных конструкций - которые понять нормальным людям невозможно. Да, нету в Питоне $_ etc. Зато код можно понять без спирта даже. У меня вот так получилось из голову.

l = [1, 2, 3, 2, 4]
tmp = []; print [n for n in l if (not tmp.append(n)) and tmp.count(n)==1]

sv75 ★★★★★ ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от anonizmus

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

> меньше информации на экране (символьной) - проще парсить мозгу %)

Наивно думать, что мозг парсит побайтно.

yk4ever ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от yk4ever

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

> print ','.join(str(x) for i,x in enumerate(mass) if mass.index(x)==i)

А, вот правильный ответ. Правда если быть точным, то это не работает unmuttable sequences.

sv75 ★★★★★ ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

Хотя в китайском вообще -- тоже нет строгости в расположении, но в нём даже 1 слово в зависимости от интонации имеет до 4 смыслов.

ЗЫ английский язык в лингвистике относят ко 2-му поколению языков, русский, латинский и китайский -- к 3-му.

vadiml ★★★★★ ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

> английский язык в лингвистике относят ко 2-му поколению языков, русский, латинский и китайский -- к 3-му.

Нет в лингвистике такого деления. Откуда это вообще?

elio ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

>ЗЫ английский язык в лингвистике относят ко 2-му поколению языков, русский, латинский и китайский -- к 3-му.

интересно... где про это можно прочитать?

anonymous ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

> ЗЫ английский язык в лингвистике относят ко 2-му поколению языков, русский, латинский и китайский -- к 3-му.

гугль об этом не в курсе, у меня нехорошие подозрения...

sv75 ★★★★★ ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от elio

Re: Perl мертв. Долгой жизни Perl...

> Нет в лингвистике такого деления. Откуда это вообще?

у меня жена филолог/языковед, преподаватель рус+англ+литературы, канд.филолог.наук, она и сообщила

vadiml ★★★★★ ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от eugine_kosenko

Re: Perl мертв. Долгой жизни Perl...

>> На питоне никак. Зато на руби вот: 

>А что, разве в Питоне палками кидаться запрещено?

Не знаю что такое палки, может это исключения? Эта конструкция не использует исключения. Исключения в руби используются так:

begin
    bla
rescue BLA
    bla
end

Или для всего метода:

def method
    bla
rescue
    bla
ensure
    bla
end

^
| вот это тоже жирный плюс руби. Почему до этого не додумались другие??

anonymous ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

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

2-й -- все части речи строго предопределены и их расположение меняет смысл сказанного

3-й -- все слова самодостаточны, независимы и могут сами нести смысловую без дополнительных вспомогательных частей (в английском нет такого кол-ва приставок, суффиксов и окончаний)

Самым развитым из европейских считается латинский, русский до него еще не дорос, литературный русский находится на уровне древне-греческого, в европе русский единственный язык на который можно переводить древнегреческий без потери смысла (в 18-19 веках всех в учебных заведениях заставляли учить древнегреческий и его литературу, видать это и сказалось)

vadiml ★★★★★ ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

Допустим что такая классификация есть и прослеживаются там какие-то признаки. Однако никто не сказал что 3е поколение языков каким-то образом лучше 2го.

elio ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от elio

Re: Perl мертв. Долгой жизни Perl...

> Однако никто не сказал что 3е поколение языков каким-то образом лучше 2го.

Разве это кто-то утверждал? А с точки зрения NLP - так второе гораздо лучше третьего (а первое еще лучше!) :)

sv75 ★★★★★ ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

Я конечно не спец в лингвистике, но сдаётся мне, что языки (по крайней мере индоевропейские) развиваются от сложных к простым. Одно время я изучал церковно-славянский ради интереса. Так вот он намного сложнее современного русского. Там, к примеру, у глаголов 4 формы прошедшего времени, 3 формы будущего, 3 именные формы. У существительных есть двойственное число с особыми правилами склонения, есть звательный падеж, полные и краткие прилагательные, ну и множество других мелких заморочек. Правила согласования слов в предложении тоже весьма громоздкие. Вообще, чем древнее язык, тем он сложнее. Санскрит считается самым сложным из всех индоевропейских языков. А древнегреческий, кстати, подвергся упрощению по мере развития цивилизации. То же самое к английскому применимо.

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

Hjorn ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от yk4ever

Re: Perl мертв. Долгой жизни Perl...

>> прочитал про то что дает my $a = $b % $c >А что оно такого даёт?

Ну ... как это по русски называется, например 5 % 2 даст тебе 1. И с % это пример просто удобности синтаксиса, в языке подобных мелочей дохрена, вкупе это дает очень "широкую гибкость" и мощь :=) В общем рекомендую посмотреть хотя бы эти две книжки:

http://schneeflocke.org/scrum/tmp2/it/perl/programming_on_perl.djvu http://schneeflocke.org/scrum/tmp2/it/perl/mastering%20regular%20expressions%...(rus,%20piter%202003).djvu

а можно и эту заодно:

http://schneeflocke.org/scrum/tmp2/it/perl/perl_bib.pdf

anonizmus ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от Hjorn

Re: Perl мертв. Долгой жизни Perl...

>Я конечно не спец в лингвистике, но сдаётся мне, что языки (по крайней мере индоевропейские) развиваются от сложных к простым.

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

anonizmus ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от vadiml

Re: Perl мертв. Долгой жизни Perl...

> 3-й -- все слова самодостаточны, независимы и могут сами нести смысловую без дополнительных вспомогательных частей (в английском нет такого кол-ва приставок, суффиксов и окончаний)

Это описание синтетического языка в противопоставлении аналитическому? Тогда нет никаких оснований считать, что 3-й уровень круче 2-го.

Hjorn ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от Hjorn

Re: Perl мертв. Долгой жизни Perl...

> Я конечно не спец в лингвистике, но сдаётся мне, что языки (по крайней мере индоевропейские) развиваются от сложных к простым.

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

elio ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от anonizmus

Re: Perl мертв. Долгой жизни Perl...

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

Может быть... Но есть мнение, что упрощение языков связано с развитием абстрактного мышления у человека.

Hjorn ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от elio

Re: Perl мертв. Долгой жизни Perl...

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

А я почём знаю? :) Это нужно у древних ариев спрашивать. Но то, что санскрит много сложнее всех современных индоевропейских языков - факт.

Hjorn ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от Hjorn

Re: Perl мертв. Долгой жизни Perl...

> Это описание синтетического языка в противопоставлении аналитическому?

Степень зависимости значения от контекста?

elio ()
Ответ на: Re: Perl мертв. Да здравствует Perl! от sv75

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

> tmp = []; print [n for n in l if (not tmp.append(n)) and tmp.count(n)==1]

Да, list comprehensions всяко приятнее монструозных регекспов. Думается мне, любители Перла сильно недооценивают возможности Питона. Хотя некоторые питоновские ограничения меня тоже бесят.

Hjorn ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от anonizmus

Re: Perl мертв. Долгой жизни Perl...

> Ну ... как это по русски называется, например 5 % 2 даст тебе 1.

Все, кто учился в начальной школе, называют это "остаток от деления". Что характерно, оператор "%" для вычисления остатка используется ещё и в Awk, B, C, C#, C++, D, E, Io, Java, JavaScript, PHP, Pliant, Pike, Python, Ruby, REXX, Tcl, Yorick. Чем тут перл выделяется - непонятно.

yk4ever ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от elio

Re: Perl мертв. Долгой жизни Perl...

>> Это описание синтетического языка в противопоставлении аналитическому?

> Степень зависимости значения от контекста?

Скорее разные способы согласования слов в предложении. Хотя можно говорить и о зависимости от контекста. Для синтетических языков контекст менее значим, потому что зачастую можно определить значение слова просто по его форме. Оттого и такая вольность при построении предложений. Но я бы не стал утверждать, что от этого язык становится более "продвинутым".

Hjorn ()
Ответ на: Re: Perl мертв. Долгой жизни Perl... от anonymous

Re: Perl мертв. Долгой жизни Perl...

> Не знаю что такое палки, может это исключения? Эта конструкция не использует исключения.

Зато Питону ничто не мешает использовать для этих целей исключения.

Опять же, зачем в Руби механизм кидания палок, если это не исключения? Эклектика?

> вот это тоже жирный плюс руби. Почему до этого не додумались другие??

В Эйфеле это было за десяток лет до руби. Однако, возвратные исключения (если я правильно припоминаю смысл конструкции) очень прожорливы по быстродействию, а без стройной системы контрактов -- еще и бесполезны.

Хотя задумка, не скрою, весьма полезная...

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