LINUX.ORG.RU

Сегодня языку Perl исполнилось 25 лет!

 , , ларри уолл


5

2

25 лет назад, 18 декабря 1987г., программист и лингвист Ларри Уолл выпустил первую версию языка программирования Perl.

>>> Подробности

★★

Проверено: JB ()
Последнее исправление: JB (всего исправлений: 4)

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

Оператор qr// не ?

Хм, да.

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

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

...Куча говна на CPAN - это те модули которые....

Могу подтвердить как честный фраер-перловик: это правда, CPAN содержит уйму отстоя. НО(!) если убрать слово Перл и заменить на FOSS, то мы с удивлением обнаруживаем полную тождественность! Т.е. CPAN просто как срез опенсорса прекрасно показывает качество «бесплатного» софта. Однако, в Перле, как и в FOSS, тебе никто и ничего не должен! Люди просто собрали воедино всё то, что им было полезно и надо не быть скотиной, чтобы сказать хотя бы спасибо за то, что не подымая ж*** ты можешь набрать cpan.org и получить почти готовое решение почти любой проблемы. Кроме того, эти решения можно допилить (если кишка не тонка проектировать профессионально) и тогда CPAN станет ещё на одну библиотеку мощнее!
Критиковать с моноклем в глазе может любое **о, а вот понять мощь Перла+CPAN - одного красноглазия мало, тут интеллект нужен.

matumba ★★★★★
()

Солидный срок. Покойся с миром, не вставай.

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

Мусью, а с чем вы сравниваете похапэ?

Perl+CPAN. От простейшего «асп»-кодинга из модуля ASP::Perl до всяких клиентов БД, SSL, парсинг форм, обработка изображений, и прочая фигня. При этом (помимо объективно более мощной библиотеки), Перл как язык имеет на порядок более грамотную структуру. Воистину, только двоечник, прогуливавший лекции по Перл, мог сваять похапэ уродца.

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

У него основной аргумент — вы, мол, смотрите, в пистоне надо функцию вызывать, а у нас в перле есть вот такая кракозяблочка.

ммм, не, не на том выступлении что видел.

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

Bugzilla, OTRS, ЖЖ и даже PHP :-) Раньше многие проекты были на Perl - rambler почта, например, множество крупных западных сервисов. Посмотрите блог о архитектурах highload Ивана Блинкова.

nempyxa ★★
()

!!!

Питон придуманная наркоманами из мелкософта хрень! Ни синтаксиса ни логики ни нормальных человеческих функций. Например легендарные С и С++ (на которых написаны оси и другие великие вещи, проверенные временем) схожи с Перлом. Взять к примеру Питон, который не похож ни на один язык программирования, как будто написание программ на нем далеко не главная возможность этого языка. Даже Ява скрипт на Перл и на Си похож!!!! А гребанная табуляция и отсутствие точки с запятой вызывает тошноту от этого «Языка программирования». Перл рулит, Перл жив и будет жить дольше всяких жалких питонов!!! Всех с праздником!!!

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

сделать свой оператор | чтобы писать конвееры в духе f3 | f2 | f1

можно попробовать в C++ извратиться. А смысл? Писать однострок на C++?

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

Именно в силу лёгкости, очевидно, Perl и является самым популярным скриптовым языком для веб-дизайна, системных скриптов и клиентского софта. Это отлично видно по изобилию CMS, написанных на перле, торрент-клиентов, инсталляторов операционной системы и т.д.

вовсе не по этому. Просто когда-то давно альтернативы попросту не было - shell это не альтернатива, ибо тормозит (дык оно для команд - это же shell. Для одной строчки на shell время 0.1сек не имеет значения). Что там ещё было? expect с его уродским синтаксисом? LISP, годный только для теоретиков? Или сишечка, которую компилять надо, что для одноразового скрипта просто глупо.

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

Инкапсуляция реализуется через «благословлённые» ссылки очень даже неплохо: мы абстрагируемся от данных объекта (в которые может разыменовываться ссылка) и действий объекта (в которые опять же разыменовывается ссылка).

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

господи, и эти люди еще смеют осуждать использование отступов вместо скобочек и прочего синтаксического мусора?!!

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

Ибо нету лишних 5 лет, чтобы учить все его 100500 операторов.

Это вы сейчас про питон?

нет. достаточно совсем немного времени, что-бы освоить все операторы питона. Их там немного, ибо «один путь».

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

Инкапсуляция реализуется через «благословлённые» ссылки очень даже неплохо: мы абстрагируемся от данных объекта (в которые может разыменовываться ссылка) и действий объекта (в которые опять же разыменовывается ссылка). Наследование и полиморфизм реализуются опять же через них (см. механизм поиска функции, в которую разыменовывается блессованная ссылка). Вот тебе и ООП.

а... Ну такой «ООП» я могу и в сишечке юзать...

Инкапсуляцию я могу реализовать предавая клиенту только описания структуры. А определение я скрою в своих *.c файлах. Полиморфизм можно реализовать через void*, который можно куда угодно преобразовать. также и наследование...

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

А смысл?

В данном случае для скриптинга. Без пайплайнов нет жизни в юниксах.

Что бы не было костылей типа этого: http://amoffat.github.com/sh/#piping . Можно в питоне написать свой __or__, но это кривой и неудобный метод.

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

Просто задумайтесь о том, что в питоне значимым является, то чего нет (пустота, пробел).

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

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

достаточно совсем немного времени, что-бы освоить все операторы питона. Их там немного, ибо «один путь».

А теперь давай посмотрим что будет если этот путь пролегает в стороне от того что тебе нужно:

# we're being run as a stand-alone script, fire up a REPL
if __name__ == "__main__":
    globs = globals()
    f_globals = {}
    for k in ["__builtins__", "__doc__", "__name__", "__package__"]:
        f_globals[k] = globs[k]
    env = Environment(f_globals)
    run_repl(env)

# we're being imported from somewhere
else:
    frame, script, line, module, code, index = inspect.stack()[1]
    env = Environment(frame.f_globals)


    # are we being imported from a REPL?
    if script.startswith("<") and script.endswith(">") :
        self = sys.modules[__name__]
        sys.modules[__name__] = SelfWrapper(self)

    # we're being imported from a script
    else:

        # we need to analyze how we were imported
        with open(script, "r") as h: source = h.readlines()
        import_line = source[line-1]

        # this it the most magical choice.  basically we're trying to import
        # all of the system programs into our script.  the only way to do
        # this is going to be to exec the source in modified global scope.
        # there might be a less magical way to do this...
        if "*" in import_line:
            # do not let us import * from anywhere but a stand-alone script
            if frame.f_globals["__name__"] != "__main__":
                raise RuntimeError("Cannot import * from anywhere other than \
a stand-alone script.  Do a 'from pbs import program' instead. Please see \
\"Limitations\" here: %s" % PROJECT_URL)

            warnings.warn("Importing * from pbs is magical and therefore has \
some limitations.  Please become familiar with them under \"Limitations\" \
here: %s  To avoid this warning, use a warning filter or import your \
programs directly with \"from pbs import <program>\"" % PROJECT_URL,
RuntimeWarning, stacklevel=2)

            # we avoid recursion by removing the line that imports us :)
            source = "".join(source[line:])

            exit_code = 0
            try: exec(source, env, env)
            except SystemExit as e: exit_code = e.code
            except: print(traceback.format_exc())

            # we exit so we don't actually run the script that we were imported
            # from (which would be running it "again", since we just executed
            # the script with exec
            exit(exit_code)

        # this is the least magical choice.  we're importing either a
        # selection of programs or we're just importing the pbs module.
        # in this case, let's just wrap ourselves with a module that has
        # __getattr__ so our program lookups can be done there
        else:
            self = sys.modules[__name__]
            sys.modules[__name__] = SelfWrapper(self)

Сможешь понять что оно делает?

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

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

Слава языку богов Вуду! Очень хороший язык.

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

А что не так с массивами в Си? Замечательно же всё

у нас в сишечке с массивами всё хорошо - их просто нет. Есть константные указатели на память, которые можно двигать вперёд и назад, имитируя поведение индексов одномерного массива. Ещё можно выделить кусок памяти на N байт (N - это ТОЛЬКО целая константа), вот только вернуть и передать этот «массив» никуда нельзя - передаётся указатель.

Есть сахарок array[index], весело пугать ньюбов записав index[array] - когнитивный диссонанс гарантирован...

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

Действительно, замечательно. Нет массивов - нет проблем!

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

вот только вернуть и передать этот «массив» никуда нельзя - передаётся указатель.

по-моему, можно вернуть структуру. А в структуре сделать struct Array{int array[];};. В результате когда вернёшь структуру она вернётся вместе массивом.

А может я не прав ^_^

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

И как же поможет end понять, что к чему относится?

я хз, спроси адептов скобочек

Не знаю, можно ли меня назвать адептом скобочек, но в vim'е по сишным скобкам ( {} ) очень удобная навигация - по «%» ( shift + 5 ) перепрыгивает на парную скобку. Не надо напрягаться чтобы понять где границы блока, даже если автором изучаемого кода был наркоман.

Хз можно ли так сделать для begin/end и тем более для отступов. Для отступов разве что folding будер работать. И причём в языках с отступами авторы-наркоманы в блок кода вставляют комментарии, начинающиеся не с отступа, а с начала строки, и фолдинг не спасает.

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

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

Один и тот же нетипизированный указатель способен разыменовываться в десяток функций и хеш данных одновременно?

господи, и эти люди еще смеют осуждать использование отступов вместо скобочек и прочего синтаксического мусора?!!

Я не осуждаю эту особенность пайтона. Мне она даже кажется интересной.

helios ★★★★★
()

Поздравляю. Вот бы его из кед и гита выковыряли, я бы тогда его из генты вычистил.

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

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

на этот случай есть perltidy

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

а... Ну такой «ООП» я могу и в сишечке юзать...

Я не против :)

Важно, что механизм благословлённой ссылки шире каноничного ООП, что позволяет реализовать последнее, не просев по производительности без eval'ов и прочего.

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

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

Пфф, сразу видно - с перлом не знаком или с чем-то его попутал. Что ты понимаешь под списком? И в чём по-твоему его отличие от массива? ;)

Кстати, ассоциативный массив ( хэш ) - архиудобная в использовании вещь. По сути - просто хранилище «key» -> «value». С array и hash быстро и легко строятся любые структуры данных в памяти. Удобно при анализе данных.

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

В этом месте принято радоваться :)

как она в фоне файлы стирает?

Один однострочник и, похоже, уже не «отмыться» :)
Радоваться тому, что верблюд рисует верблюдов... Да, так мало мне нужно для радости.

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

В данном случае для скриптинга. Без пайплайнов нет жизни в юниксах. Что бы не было костылей

пайпы в shell это на самом деле монады из ФП. Они в принципе не могут нормально ложиться на императивный ЯП. В перловке и в shell'е пайпы реализованы с помощью костыля-временного файла, который принципиально нельзя завернуть в машинный код, и который совершенно непереносим.

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

В перловке и в shell'е пайпы реализованы с помощью костыля-временного файла, который принципиально нельзя завернуть в машинный код

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

, и который совершенно непереносим.

Хм... power shell видел?

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

Кстати, ассоциативный массив ( хэш ) - архиудобная в использовании вещь.

Не могу не плюсануть.

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

но не всегда простые вещи просто делаются

Viva la Perl, где простые вещи делаются просто, а сложные просто делаются :)

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

Один из наиболее адекватных, на фоне всяких недоподелок типа питона и руби.

Я не фанатик и знаю что язык выбирают исходя из задачи, но меня огорчает что в современном дистрибутиве линукса устанавливается всё больше интерпретаторов разных языков. Скоро их будет больше, чем команд в ассемблере для той самой архитектуры, где это крутится :\

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

Только наркоман мог придумать задавать scope при помощи табуляций.


Не трож YAML/HAML!

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

по-моему, можно вернуть структуру. А в структуре сделать struct Array{int array[];};. В результате когда вернёшь структуру она вернётся вместе массивом.

можно накостылить:

#include <stdio.h>

typedef struct
{
	int a[10];
}a10;

void print_a10(a10 a)
{
	int j;
	for(j = 0; j < 10; j++)
		printf("%d\n", a.a[j]);
}

int main()
{
	a10 a;
	int j;
	for(j = 0; j < 10; j++)
		a.a[j] = j;
	print_a10(a);
	return 0;
}

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

Если убрать маркеры конца блока то

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

KRoN73 ★★★★★
()

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

За Perl!

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

А вот создать язык для обработки текста без нормальной индексации строк, слайсов и других постоянно нужных операций мог только настоящий героинщик.

Постоянно нужных - кому? На perl не пишут ОС'и, и для микроконтроллеров прошивки тоже. В нём более высокоуровневые операции. И, кстати, если вдруг возникнет необходимость обращаться к отдельным символам в строке, это можно сделать. Что такое слайсы в контексте ЯП - я вообще не в курсе.

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

Не внимательно прочитал. Ну так это, выбор, что в этом плохого? Вот если бы были только пробелы или табуляция, тогда да, беда.

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

Хз можно ли так сделать для begin/end и тем более для отступов.

можно! Алгоритм тривиальный.

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