LINUX.ORG.RU

[история успеха] Я не осилил Perl :(

 


0

2

Я давно понял, что для автоматизации выполнения повседневных задач мне необходим какой-нибудь простой интерпретируемый язык с большой базой подпрограмм на все случаи жизни. В котором мне не придётся волноваться о выделении и освобождении памяти, указателях, грамотном ООП, синтаксических заморочках. Где не нужно продираться через многочисленные уровни абстракций, дабы понять в чём скрывается ошибка, насилуя трасcировщик и многократно перекомпилируя исходники.

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

Беда пришла оттуда, откуда я её совсем не ждал. Я решил, по старой привычке, создать несколько структур данных, исключительно в целях организации кода. Но никакой отдельной главы, им посвященной, я в книгах не нашёл. Копнув глубже, я обнаружил, что в качестве структур данных в Перле используются хеши, причём их синтаксис, применительно к сложным структурам, меня абсолютно не обрадовал. Поначалу, я решил плюнуть на структуры данных и попробовать местные объекты, благо им, таки, была посвящена отдельная глава. Но, как я и предполагал, объектами оказались те же хеши, оформленные особым образом. Возвращаясь к ним, я с ужасом, обнаружил местные ссылки и оператор разыменования. Так же я понял, что без хорошей зубрёжки и многочасового вдумчивого чтения мне никогда не понять в каких случаях этот оператор работает; когда в коде стоит употреблять фигурные, когда круглые, когда квадратные скобки, а когда ещё ставить перед ними волшебные слова; в какой ситуации вместо двойной кавычки стоит употреблять одинарную; когда перед именем хеша стоит ставить %, а когда $ и в каком случае эти два одинаковых имени будут относится к двум совершенно между собой не связанным структурам данных. В принципе - всё это в книгах описано и через недельку я, наверное, в этом бы разобрался, а через пару лет практики даже перестал бы совершать связанные с этим ошибки, но, нет уж спасибо...

Так что я решил забить на Perl т.к. перестал понимать в какой ситуации его использование будет предпочтительнее чем применение связки C+Lua, тем более, что сложность их освоения, похоже, сопоставима. Большие надежды я возлагаю на Лисп, в особенности, если научусь вызывать из него программы с аргументами и парсить их вывод. И, возможно, стоит таки попробовать Питон. Я не ругаю Perl. Просто жалко, что его изучение, поначалу напоминавшее добрую сказку, под конец превратилось в какое-то жёсткое порно.

Годно. В Talks надо было запостить!

hired777
()

>когда в коде стоит употреблять фигурные, когда круглые, когда квадратные скобки, а когда ещё ставить перед ними волшебные слова; в какой ситуации вместо двойной кавычки стоит употреблять одинарную; когда перед именем хеша стоит ставить %, а когда $ и в каком случае эти два одинаковых имени будут относится к двум совершенно между собой не связанным структурам данных

Ты ниасилил даже вторую главу верблюдокниги? Это насколько надо быть головой стукнутым?

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


За неделю можно наизусть верблюдокнигу заучить.

redgremlin ★★★★★
()

>не осилил Perl
ОМГ! Эпический неосилятор. Вдоль!

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

Убейся!
http://www.google.com/search?q=perl oop

Bad_ptr ★★★★★
()

Обрати внимание на связку C+Guile.

PS: Антилисперам просьба не беспокоиться. Это всего лишь предложение варианта. Одного из.

OldFatMan
()

Добавлю для «равновесия»:

И, возможно, стоит таки попробовать Питон.

И это имеет смысл. (Хотя я сам Питоном пользуюсь крайне редко)

OldFatMan
()

>связки C+Lua, тем более, что сложность их освоения, похоже, сопоставима
Для решения повседневных задач. Ага. Ну неплохо так упоролся перлом, видимо.

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

> > не осилил Perl

ОМГ! Эпический неосилятор. Вдоль!

Убейся!

Какие злые все. Ну не всем Perl даётся. :)

Мой приятель, например, больше 20 лет на С/С++ программил, пару лет назад тоже озаботился проблемой простого интерпретируемого языка. Я подумал, что как раз Perl ему подойдёт. Подсовывал и «альпаку», и «верблюда». Никак. Плюётся и матерится. Вопит, что лучше на С всё напишет. В конце концов я отстал от него. Все люди разные.

OldFatMan
()

Лучше сообщи нам что ты осилил в этой жизни ;)

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

Да не бери в голову - это всего лишь одна «история успеха» - учи себе. Может, у тебя «всё получится».

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

>что лучше на С всё напишет

у ТС, кстати, наблюдаются зачатки той же проблемы: «C+Lua».

Вот так Си влияет на мозги. Печально, да.

chinarulezzz ★★
()

>Просто жалко, что его изучение, поначалу напоминавшее добрую сказку

Читай «Изучаем perl» (Рэндал Шварц, Том Кристиансен ), выполняй задания после глав. Это и есть добрая сказка.

Когда захочешь больше, бери книгу «Программирование на Perl» (Ларри Уолл, Том Кристиансен, Джон Орвант). Пройдёшь ту же сказку за тёмную сторону силы, меняя сюжет

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

> Вот так Си влияет на мозги. Печально, да.

Ну, ты уж на С не наезжай слишком-то. Нормальный язык. Я сам на нём тоже уже лет 20 пишу. Просто у меня «психика добрая» и более гибкая. Я не считаю С «панацеей от всех болезней». У меня другой подход - каждой задаче - свой, наиболее подходящий инструмент. Поэтому и Perl пользую, и Питон (реже, правда), и scheme всякие.

Так что С тут ни при чём. Всё дело в мозгах человеческих, как всегда.

OldFatMan
()

> Так что я решил забить на Perl т.к. перестал понимать в какой ситуации его использование будет предпочтительнее чем применение связки C+Lua, тем более, что сложность их освоения, похоже, сопоставима.

А вот это ты действительно загнул.

Perl с нуля для решения повседневных задач осваивается за 2-3 дня. Через пару недель постепенно раскусываешь многие полезные фишки. И Perl становится очень удобным рабочим инструментом «на каждый день».

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

Так что сложность их освоения, имхо, всё-таки несопоставима.

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

два чая этому господину. Книга с альпакой (Шварц) - самое то для начала: просто, понятно и с юмором. Уолла не читал, т.к. не было необходимости

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

Поддерживаю.

Как минимум 5 человек знаю лично, кто по ней изучал perl.

adzeitor
()

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

grouzen ★★
()

Иссусья тряпка? о_О

По сабжу, 21 век на дворе, в топку перл.

Всегда увидивляло, почему у его апологетов стойкий иммунитет к context-sensitive грамматике синтаксиса. Понимаю еще лисп, там как-то оправдано наличием макросов.

anonymous
()

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

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

С/С++

Плюётся и матерится.

Не потому ли, что автор учебника советует не инициализировать переменные явно, и ещё некоторые «милые» сердцу труёвого сишника вещи? :)

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

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

никогда студентом не был? рецепт: завтра сдавать курсач (perl/cgi) :)

arsi ★★★★★
()

Ты ниасилил даже вторую главу верблюдокниги? Это насколько надо быть головой стукнутым?

«Кроме того, точно так же, как нет никакой связи между $fred и @fred, хеш пееменная %fred не имеет ничего общего с названными объектами. [...] Так, обращение к элементам хеша %fred производится путем указания $fred{$ключ}, где $ключ - любое скалярное выражение.» - взаимоисключающие параграфы.

«$$hashref{KEY} представляет то же самое, что и ${$hashref}{KEY}, и не имеет отношения к ${hashref{KEY}}, разыменовывающему элементу хеша с именем %hashref» - вынос мозга.

«Обратите внимание на то, что $array[3] и $array->[3] - это не одно и то же. В первом случае речь идет о четвертом элементе массива @array, а во втором - о четвертом элементе массива, ссылка которого содержится в $array.» - но: «$AoA[2][3] $ref_to_AoA->[2][3] эквивалентно $AoA[2]->[3] $ref_to_AoA->[2]->[3] Здесь, однако, перед первой парой квадратных скобок не подразумевается присутствия ->, но для разыменования $ref_to_AoA начальный -> требуется».

«Однако будьте осторожны: квадратные скобки задают списковый контекст для своего выражения. В данном случае это безразлично, но в предыдущем вызове mysub могло иметь значение. Когда это существенно, используйте явным образом scalar для установления контекста.» - магические слова изменяющие поведение квадратных скобок.

И это всё ради создания одной жалкой структуры данных? 0_o

Убейся! http://www.google.com/search?q=perl oop

Сразу после того как вы научитесь читать: «Поначалу, я решил плюнуть на структуры данных и попробовать местные объекты, благо им, таки, была посвящена отдельная глава. Но, как я и предполагал, объектами оказались те же хеши, оформленные особым образом.»

C+Guile

Это тоже хорошая идея. Спасибо.

Для решения повседневных задач. Ага. Ну неплохо так упоролся перлом, видимо.

У вас попоболь или вы и вправду читать не умеете: «т.к. перестал понимать в какой ситуации его использование будет предпочтительнее чем применение связки C+Lua, тем более, что сложность их освоения, похоже, сопоставима»? Перефразируя: я не вижу смысла тратить столько времени на изучение заморочек Perl'a, который мне нужен лишь для удобства, когда его можно потратить на более востребованные и полезные вещи.

Вопит, что лучше на С всё напишет.

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

выполняй задания после глав. Это и есть добрая сказка.

Вот она и закончилась. А для понимания того как тут устроены структуры данных пришлось лезть в «„Программирование на Perl“ (Ларри Уолл, Том Кристиансен, Джон Орвант)» тут-то и началось жёсткое порно.

Не потому ли, что автор учебника советует не инициализировать переменные явно

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

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

> Не потому ли, что автор учебника советует не инициализировать переменные явно, и ещё некоторые «милые» сердцу труёвого сишника вещи? :)

И поэтому, и за слишком вольное обращение с разными типами данных, и за «бардак» (это его определение) при работе с массивами. И вообще он считал, что «расплодили сущности без надобности» - это про то, что кроме Ъ-массивов в Perl-е ещё есть списки и хэши. :)

Ещё его бесили «излишние» управляющие конструкции: unless, until, foreach. :) Вот это мне было совсем непонятно: не нравится - не используй, но ведь удобно же.

OldFatMan
()

Для «повседневых задач» неплохим выбором будет какая-нибудь Scheme с батарейкими. Например, Racket. CL для это дела слишком жирный и сложный.(хотя, реализации типа clisp можно в принципе под скриптование приспособить, но лучше взять схему) Если речь о винде, тогда я бы взял Powershell - сам его использую.

lovesan

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

Кто-то там кстати посоветовал «C+Guile» - не слушай этого придурка.
Использование Си для скриптования само по себе смешно, а guile - хреновая и малобатареечная схема.

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

> Походу C таки опасен для мозга, потому что у меня появилась та же мысль :)

Да брось ты! :)

Просто не надо при проектировании решения всех задач сразу хвататься за С, как единственный инструмент. Я, к примеру, в половине случаев вообще начинаю со скриптовых языков. Было несколько случаев, когда задача вообще на shell решалась после размышлений и анализа. :)

Что за «легенда» такая, что ЯП неким мистическим образом формирует/меняет мозг программиста?!! :) При разумном подходе, если помнить о том, что ЯП - это всего лишь инструмент, мозг остаётся здоровым. Ну, разве, что Васик является исключением, но я его игнорирую полностью. :)

OldFatMan
()

Кстати, есть ещё вариант: Tcl/Tk

Осваивается достаточно быстро. Язык несложный. А Tk позволяет быстро клепать корявые, но работоспособные GUI.

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

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

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

> guile - хреновая и малобатареечная схема.

А почему «хреновая», можно поподробнее? (а си, видимо, имеется ввиду привязать библиотеку, ежели понадобится, если это происходит редко, то проблем немного).

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

Можно, я (тот придурок, который предложил связку C+guile) скажу? :)

Связка была предложена, как альтернатива связке C+Lua (которую упомянул ТС). А УМНИК-анонимус, не разбираясь, стал звания присваивать. Болезнь такая. :)

В чём «хреновость» guile, я не понимаю. Мне guile вполне хватает. И даже в качестве отдельного скриптового языка. И для привязки библиотек - там действительно нет особых проблем.

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

Посмотрел на подпись того анонимуса - так это ж lovesan!

Многое объясняет.

У него всё «хреновое», что в его «сферу деятельности» не вписывается. Выводы делайте сами. ;)))

OldFatMan
()

>но ведь удобно же.

Но в то же время так не напишешь:

if !(open(INPUT_FILE, $input_file)) die «Cannot open file: $!»;

А так выглядит некрасиво:

unless (open(INPUT_FILE, $input_file)) {die «Cannot open file: $!»}

Приходится так:

open(INPUT_FILE, $input_file) || die «Cannot open file: $!»;

Что тоже неплохо, но мне привычней первый вариант.

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


Его и имел в виду.

Я, к примеру, в половине случаев вообще начинаю со скриптовых языков.


Я считаю это правильным подходом. И сам вот хотел использовать Perl для того чтобы делать наброски программ, с последующим переписыванием на том же C, но похоже он слишком перегруженный для этой роли. Теперь мне кажется, что движуха за переписывание всех скриптов на C возникла среди разработчиков дистрибутивов отнюдь не из-за скорости их выполнения :)

Осваивается достаточно быстро. Язык несложный. А Tk позволяет быстро клепать корявые, но работоспособные GUI.


Я с тем же успехом могу выучить JavaScript в добавок к моему любимому Qt. Правда меня вымораживают вкрапления HTML, что неизбежно унавоживают весь код в книгах по JS, да и нормального консольного интерпретатора я для него не видел.

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

>«Кроме того, точно так же, как нет никакой связи между $fred и @fred, хеш пееменная %fred не имеет ничего общего с названными объектами. [...] Так, обращение к элементам хеша %fred производится путем указания $fred{$ключ}, где $ключ - любое скалярное выражение.» - взаимоисключающие параграфы.

Где ты видишь параграфы? $ - указание на скалярность. $a - скаляр. $a[1] - тоже скаляр (элемент массива @a), как и $a{key} (значение ключа key хеша %a). При этом @a и %a к $a отношения никакого не имеют, как и $a[] с $a{}.

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

- магические слова изменяющие поведение квадратных скобок.


Прочитать три страницы главы про то, что такое контекст и с чем его едят - это неподъемный труд?

И это всё ради создания одной жалкой структуры данных? 0_o


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

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

> open(INPUT_FILE, $input_file) || die «Cannot open file: $!»;

Дык, самый лучший вариант! Всё понятно и очевидно. :)

> Осваивается достаточно быстро. Язык несложный. А Tk позволяет быстро клепать корявые, но работоспособные GUI.

Я с тем же успехом могу выучить JavaScript в добавок к моему любимому Qt.

За JavaScript ничего не могу сказать - знаком с ним шапочно. А вот на Tcl/Tk прототипы и небольшие утилитки клепаются замечательно (с моей т.з.). Впрочем, вариантов уже накидали достаточно, в т.ч. и «любезнейший lovesan», ;) (кстати, предложенный им Racket тоже хороший вариант) - так что теперь выбор за тобой.

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

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

Мне так не кажется. Возможно, ты напрасно начал с «верблюда» и стал углубляться во внутренности Perl-а. Надо было начать с «альпаки» (я так начинал в своё время), тогда Perl воспринимался бы, как удобный и лёгкий скриптовый язык для создания прототипов многих задач. Например, если в задаче есть поиск с использованием регэкспов, то инструментов шелла может не хватить, а C/C++ «слишком жирно». Вот тут и выручает Perl. И никакой «перегруженности». В общем повторюсь: инструмент - под задачу.

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

Да просто он тебе не нужен был.

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

OldFatMan
()

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

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

>А для понимания того как тут устроены структуры данных пришлось лезть в «„Программирование на Perl“

Читай 2ю часть альпаки.

AptGet ★★★
()

Позорный ниасилятор. Перл один из самых простых языков. Выучить его можно за пару дней. Ты же в Си как-то выучил когда писать &,*,.,-> ? Вот и здесь тоже самое.

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

Есть давняя шутка про «а ты знаешь перл?». Однако, на практике, даже люди, пишушще на нём 10 лет, не знают и 10% его. Это, как и естественные языки, живой организм, постоянно развивающийся и крайне сложный по своей структуре. Это как борги: любой программист, который «болел» перлом, оставляет в нём часть своей личности.

helios ★★★★★
()

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

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


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

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


Может быть :)

Поздравляю, я такой же неосилятор perl'а :)


Спасибо :)

Вот и здесь тоже самое.


В C синтаксис гораздо проще, а Лисп я вообще считаю идеалом - скобочки, атомы, car, cdr да апостроф.

Советую посмотреть на Racket


Схема? Честно говоря, я ещё с университета привык к clisp, но в нормальных задачах его ещё не применял, вполне возможно, что на схеме это реализовать будет проще. Спасибо.

Nebuchadnezzar ★★★★
() автор топика

Тред-детектор.

ЗЫ: За лисп лучше не берись. Если после связки С-<встраиваемый яп> ты удивляешься почему объекты это хэши, значит с С у тебя всё очень печально, ну а с лиспом будет ещё печальнее.

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

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

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

А питон за два часа. Причем преимуществ у перла, по сравнению с последним, никаких нет (разве что нечитаемые однострочники, да).

baverman ★★★
()

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

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