LINUX.ORG.RU

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

 , , ларри уолл


5

2

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

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

★★

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

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

perl -e'print sort {($a cmp $b)} grep {$i++%2 or /\d/o} split //, «He1lo, p3r1-H4X0R !1!»'//, «He1lo, p3r1-H4X0R !1!»'

,-011134elpr

Это снова Интернет-магазин на Перле?

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

После рассказов об эпической мощи Перла я уже ничему не удивлюсь.

«Ты не узнаешь пока не попробуешь» (с)

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

Я в курсе, как оно там пишется. Пока PyInstaller (и много чего ещё) не будет уметь py3k, 2.7 -наше всё.

border-radius
()

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

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

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

Объект как ключ в хэш-таблице? А смысл?

PS: Хэш-таблица - это структура хранения идентификатора и ассоциированного с ним элемента. Думаем дальше. Вы хотите в хэш-таблицу занести объект (ключ) и ассоциировать с ним какой-то элемент (значение). Но это глупость, поскольку надо будет вычислять хэш-функцию поверх объекта. Более того, ассоцииации с объектом достичь очень просто: $obj->{__el} = $value . Если объектов много - то можно оперировать коллекцией объектов в любой структуре данных. Так же лучше, не так ли? Либо расскажите что вы хотели на деле.

anonymous
()

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

С последней версии. Поминем.

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

Но это глупость, поскольку надо будет вычислять хэш-функцию поверх объекта.

Не вижу связи. Даже в Яве библиотечные хэш-таблицы могут принимать любой объект как ключ - чтобы делать что-то осмысленное, конечно, класс должен определять методы hashCode() и equals().

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

Мне нужен маппинг из пары строк(порядок игнорируется) в другую структуру. На Перле без особо сильных извращений только сортировать и конкатенировать через сепаратор(там даже костыль в синтаксис для этого встроен, типа $hash{$foo, $bar}) Ну или реализовывать свои хеш-таблицы.

А по-хорошему надо было бы просто определить объект «неупорядоченная пара строк» с хэш-функуцией, или даже взять библиотечную реализацию множеств. На Яве за пять минут.

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

Не вижу связи. Даже в Яве библиотечные хэш-таблицы могут принимать любой объект как ключ - чтобы делать что-то осмысленное, конечно, класс должен определять методы hashCode() и equals().

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

Мне нужен маппинг из пары строк(порядок игнорируется) в другую структуру. На Перле без особо сильных извращений только сортировать и конкатенировать через сепаратор(там даже костыль в синтаксис для этого встроен, типа $hash{$foo, $bar}) Ну или реализовывать свои хеш-таблицы.

А по-хорошему надо было бы просто определить объект «неупорядоченная пара строк» с хэш-функуцией, или даже взять библиотечную реализацию множеств. На Яве за пять минут.

Нафиг ты пишешь про всякие там явы и руби? Я так и не понял отчетливо что же тебе надо. Ты сам понял что тебе надо? Навскидку похоже что ты с ООП мозга пытаешься лезть в перл. Ты бы еще с таким мозгом в Си полез.

Мне нужен маппинг из пары строк(порядок игнорируется) в другую структуру.

Давай-ка развернуто и с примером. А там уже разберемся кто виноват.

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

У кого ещё тут шняга?

perl -e'print sort {($a cmp $b)} grep {$i++%2 or /\d/o} split //, «He1lo, p3r1-H4X0R !1!»'//, «He1lo, p3r1-H4X0R !1!»'
,-011134elpr

>>> s="He1lo, p3r1-H4X0R !1!";print ''.join(sorted(map(lambda c: c if c.isdigit() or s.index(c)&1 else '',s)))
,-011134elpr

Зы. %2 медленнее &1, это так, к слову.

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

А давай я тебе задание дам: выводи каждую четную позицию и все цифры в осортированном (по сравнению строк) порядке:

Challenge accepted. Но задание скучное и тривиальное :(. Впрочем, нетривиальное я и не решу.

In [18]: "".join(sorted([s for n,s in enumerate('He1lo, p3r1-H4X0R !1!') if n%2 or s.isdigit()]))
Out[18]: ' ,-011134elpr'

Но я думаю перлом ты не владеешь потому что, уверен, то что ты написал можно сделать в три раза короче и в 10 раз непонятнее. Питон может делать со строками всё то же что и перл, только менее удобно. Обработка текста регекспами это конёк перла и тут спорить сложно.

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

Ты бы еще с таким мозгом в Си полез.

В Си таких проблем быть не может по причине отсутствия библиотечной реализации хеш-таблиц.

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

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

В Си таких проблем быть не может по причине отсутствия библиотечной реализации хеш-таблиц.

в смысле в libc? Ну дык внешнюю использовать можно. У нас judy используют.

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

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

Уумственноотсталыхсвояфилософия...

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

Мне нужен маппинг из пары строк(порядок игнорируется) в другую структуру. На Перле без особо сильных извращений только сортировать и конкатенировать через сепаратор(там даже костыль в синтаксис для этого встроен, типа $hash{$foo, $bar}) Ну или реализовывать свои хеш-таблицы.

типа так:

>>> s = {}

>>> s[frozenset(('a','b'))] = 1

>>> s[frozenset(('a','c'))] = 2

>>> print s[frozenset(('c','a'))]

2

?

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

При том, что scope заданое проблемами и табуляциями - маразм.

Scope это область видимости переменных. Вот когда сделаешь интерпретатор который будет хранить символы которыми обозначается scope, a lookup переменных будет осуществляться поиском в тексте, вот тогда обозначение области видимости переменных отступами можно будет с гордостью назвать маразмом!

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

Мне нужен маппинг из пары строк(порядок игнорируется) в другую структуру.

На Яве за пять минут.

тю, достаточно на питоне одной минуты хватит. Что-то типа такого:

def __hash__(self, hashable:list):
  return super().__hash__(tuple(sorted(hashable)))

Выбирай сам куда это вставить: расширить встроенный dict, сделать свой list c функцией кэширования...

Я, кажись, даже рецепт на stackoverflow видел, и не один.

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

Но я думаю перлом ты не владеешь потому что, уверен, то что ты написал можно сделать в три раза короче и в 10 раз непонятнее.

1. Я был о вас более лучшего мнения. Несколько. 2. Если бы я хотел что-нибудь сложнее или короче - то, поверь, так бы и сделал. 3. Мало интересуют «бирюльки». Суть примера: понять как реализуется потоковая схема обработки данных (большой привет true-unix'оидам). Результат был ожидаемый: что жаба, что питон - все есть примерно одинакового уровня остой.

PS: А все эти аругменты насчет «скобочек» и «отступов» - это такая мелочная чушь на самом деле (вероятно это сильно важно для школоты/студентоты). Отстойность Java/Python/C#/... вовсе не в синтаксисе (к синтаксису привыкнуть - это лишь время двух дней плотного программирования, не более).

2border-radius: %2 vs &1 - суть не важна (%-осталось от упрощения первоначальной более сложной формулы). Что же тестировалось - читай выше. И, да, тебе особый привет за нереализацию примера. true_admin, хотя бы перед неуместной и ненужной оценкой решение предложить успел.

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

Суть примера: понять как реализуется потоковая схема обработки данных (большой привет true-unix'оидам). Результат был ожидаемый: что жаба, что питон - все есть примерно одинакового уровня остой.

Я был о вас более лучшего мнения.

это я был о тебе лучшего мнения. Мой код заменой двух символов превращается в генератор который делает ленивые вычисления и ему без разницы объёмы входных и выходных данных.

Привет анонимусам.

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

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

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

PS: Прямой тупой ответ надо бы дать такой: можешь объекта сдампить в строку, но я почти уверен что задача элегантно решается другим путем.

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

Мой код заменой двух символов превращается в генератор который делает ленивые вычисления и ему без разницы объёмы входных и выходных данных.

Ну елки-палки. Да при чем тут все это? Речь была про структуру потоковой обработки. Какой масти У ВАС рабочая лошадь - это уже вопрос десятый - у вас лошадь хромая. Вы все еще упорно продолжаете смотреть не в те ворота.

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

Речь была про структуру потоковой обработки

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

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

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

anonymous:

perl -e'print sort {($a cmp $b)} grep {$i++%2 or /\d/o} split //, "He1lo, p3r1-H4X0R !1!"'//, "He1lo, p3r1-H4X0R !1!"'



Даже .NET 1-в-1 так умеет:

$i=0; "He1lo, p3r1-H4X0R !1!".ToCharArray() | ?{(($i++ % 2) -ne 0) -or ($_ -match "[0-9]")} | sort-object
Давай другой пример.

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

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

[telepathy]
анон, как обычно был косноязычен. Он хотел показать и рассказать про pipes и иже с ними. А ты эти самые трубы не показал (ну потому что анон косноязычен, а труадминам полное ТЗ подавай - нестыковочка желаний-с). Вот и вышло , что написали вроде один и тот же код по решению, но с применением разных подходов, и анон все еще смотрит на тебя как на говно.
[/telepathy]

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

Обработка текста (регекспами) это конёк перла

А я, например, всегда считал, что это конёк Ruby. В общем, неоднозначное, необдуманное заявление.

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

А я, например, всегда считал, что это конёк Ruby. В общем, неоднозначное, необдуманное заявление.

На самом деле он прав, перл с регулярками лучше дружит, руби с ними тормозил до появления более-менее вменяемого 1.9.

anonymous
()

Quirks-говно празднует день рождения. Я надеюсь последнее.

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

Точно! Вам ...

... всё абсолютно правильно сказали — с ООП головного мозга Вам в С делать нехрен.

Учите матчасть — linux.die.net/man/3/hsearch Попутно замечу что это реализация из glibc. Т.е., того самого С runtime, который a priori есть в Вашей системе, если только не из под оффтопа пишете.

Реализиции деревьев, списков, линейного поиска в массиве и регулярных выражений (регэкспов) показать или сами найдёте? Ну и да — регэкспов есть два вида к Вашим услугам, это всё те же glibc'овые и заимствованные из libpcre (pcre). Это я так... На всякий случай говорю, авось кому понадобится.

Искренне Ваш mr_noone.

/* P.S. Сделайте милость — пристрелите того препода, который Вас учил. За развращение малолетних посредством незнания С. */

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

Массивов... Нет?!? ...

... Простите, коллега, а куда же они делись-то?!? Их отменили законодательно? )))

Вот чего нет, так это «строк» (string, CString и прочее аналогичное) в явном виде, их как-раз через массив и приходится делать. Но это отчасти даже удобным бывает. Насчёт строк/массивов справедливо как для С, так и для С++.

Искренне Ваш mr_noone.

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

Коллега, а по рукам? ...

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

Искренне Ваш mr_noone.

anonymous
()

По теме...

... Всех не осиливших bash и C поздравляю с днём рождения Perl. Простите, припиздал... )))

Искренне Ваш mr_noone.

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

Нда, юноша. Я бы вас на день рождения девушки не пригласил.

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

кстати, какая мирная у нас беседа.

Лор, куда ты катишься??

Клыки режутся, а все, [censured], вежливые как весь [censured] ? :D

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

Вы знаете... )))

... Безусловно клыки есть у всех (ЛОР как-никак))) ). Но иногда более приятно их вонзить вежливо и с улыбочкой, можно сказать, [censored] как по джентельменски, чем орать при этом, как будто на член наступили... )))

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

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

это можно сделать на любом тьюринг-полном ЯП. Хоть на brainfuck'е

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

кто мешает эту самую монаду влепить в императивщину? Да никто.

кто мешает тебе ходить на костылях? Да никто не мешает. Но ты ведь не ходишь, я надеюсь? Тут аналогичный случай.

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

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

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

Не понимаю чем плоха такая прямая и чистая реализация. Всё ясно и просто.

потому-что это _отсутствие_ реализации. Сахар для *(index+array).

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

Если глубже копнуть то if костыль для jnz, ja etc.

if не костыль, а функция высшего порядка. Компилятор принимает программу с if'ами, и набор jnz,jz,etc. И создаёт байт код из того, и другого.

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

татупед

расскажешь, сколько раз тебе это пригодилось за последние 10 лет?

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

А вот тут все куда прозрачнее:

можно и попроще, без всяких встроенных костылей:

$ echo "депутат" | sed -r 's/.*/\n&\n/;tl;:l;s/(\n.)(.*)(.\n)/\3\2\1/;tl;s/\n//g'
татупед

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

это можно сделать на любом тьюринг-полном ЯП

будучи программистом..

Хоть на brainfuck'е

либо просто упоротым или brainfucker'ом

router ★★★★★
()
Ответ на: Массивов... Нет?!? ... от anonymous

Массивов... Нет?!? ... ... Простите, коллега, а куда же они делись-то?!? Их отменили законодательно? )))

массивов нет в том смысле, который вкладывается в понятие «массив» в любых других ЯП. Массив - это такая сущность, которая имеет в своём составе число эл-тов, их тип, и сами эл-ты. А в C «массив» на самом деле является несколькими элементами, которые расположены подряд в памяти. Число этих эл-тов не определено (точнее, компилятор знает размер массива, но только _сразу_ после его определения. Учитывая, что в си всего два контекста (локальный и глобальный), то смысл есть только в глобальных массивах). Ну и кроме того, невозможно создать массив в куче. (можно только создать кусок памяти, с нужным размером и типом указателя).

Короче: в сишечке нет *типа* «массив», а есть только тип «указатель», который можно использовать вместо массива.

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