LINUX.ORG.RU
ФорумTalks

таки Perl


0

1

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

Стоит ли браться за Perl? Я думал, что он весьма популярен и распространен, а оказывается на ЛОРе его уже несколько лет хоронят говорят «закопайте это говно» и «учи питон». Назначение, как уже и сказал - общее развитие + приятный бонус в виде инструмента для написания скриптов.

Если планируешь им пользоваться, то учи, если нет, то не учи. Качественной литературы по perl предостаточно.

Evgueni ★★★★★
()

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

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

Перл начали хоронить, когда питон был несъедобной поделкой. И всё ещё не похоронили. Смиритесь! Нет языков хоть сколько то похожих на perl.

TS, Perl оригинален. У него неограниченная грамматика и многие модули (man CPAN) расширяют её так, что другим языкам остаётся только курить в сторонке.

Реально сейчас полезно использовать Perl для автоматизации деятельности (скрипты), веба, любого вида парсинга. Регулярки Perl - самый сок! Тут они являются логичным продолжением языка, а не костылём, перенятым из Perl, как в других языках. Однострочники на perl прекрасны - то, для чего другие будут писать отдельный проект или набивать ручками, perl сделает за один однострочник.

Немного про Perl: http://gosha.bugov.net/2011/08/bespoleznyj-perl/

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

Знаю что странный, но он не ТАКОЙ странный. Да, писать однострочники особого желания нет, да и оегэкспов я пока побаиваюсь, так что нечитаемый код писать я вряд ли буду, по крайней мере пока.

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

Учи бейсик.

p   libmono-microsoft-visualbasic10.0-cil                  - Visual Basic 2010 runtime libraries for Mono                    

Такой? ^_~

IceAlchemist
() автор топика

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

sol13 ★★★★★
()

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

amomymous ★★★
()

Осторожно, Perl!

Шуточная на половину статья, в которой упоминаются некоторые перловые хаки. Perl самый опасный язык программирования, поскольку он развивает “отвратительные” качества в людях. Некоторые их называют “добродетелями” программистов: лень, нетерпение, высокомерие (laziness, impatience, hubris).

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

Вот собственно, статья.

Среди множества языков программирования один занимает особое место. Это язык Perl! Если вы его не знает и получите предложения его освоить – бегите как можно дальше, иначе…

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

Причем это происходит постепенно и от того более коварным является этот процесс. Человек этого не замечает и даже потом, когда Perl полностью им завладевает, человек не будет это осознавать. Более того, он будет даже превозносить эти отвратительные черты, как великие добродетели программистов. Но какие это же добродетели!

Возьмем, например, высокомерие. Оно, якобы, помогает писать замечательные программы. Глупости все это. Высокомерие Perl программистов настолько велико, что они даже встревают в спор С++ и OCaml программистов о производительности их языков. Сам был очевидцем такого спора. В споре шел разговор как оптимально генерируется ассемблерный код, а также затрагивались вопросы оптимизации хвостовой рекурсии… Решили провести тесты, например, посредством вычисления чисел Фибоначчи.

А тут мимо проходил Perl программист. И что вы себе думает, он посмел высокомерно утверждать, что вычислит на Perl числа Фибоначчи быстрей чем они. Поспорили на бутылку коньяка. Программисты C++ и Ocaml знали, что из себя представляет Perl, поэтому сразу согласились на спор. Но они не знали, что из себя представляют Perl программисты. Кто бы мог подумать, что этот Perl программист выиграет спор! Он первый вычислил числа Фибоначчи! Когда остальные участники спора, отказываясь верить словам, подошли увидеть все своими глазами, Perl программист запустил на исполнение следующий код:

 use strict;
 use warnings;
 use Memoize;
 memoize('fib');
 sub fib {
 	my $n = shift;
 	return $n if $n < 2;
 	fib($n-1) + fib($n-2);
 }
 my $n = $ARGV[0];
 print "fin($n) = ", fib($n), "\n";
Конечно, для тех, кто знаком с модулем Memoize, все становиться ясно с первого взгляда.

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

С дрогой стороны, Perl не только “самый быстрый язык”, но и самый ленивый. Нет, не надо говорить, что самый ленивый – это Haskell. Вы бы посмотрели, как иногда Haskell программисты борются с ленивостью своего языка. Perl ленив по другому. Правильно, он ленив, потому, что ленивы его использующие люди. Кстати, и потому что они ленивы, они даже не нагружают свой компьютер лишней работой: вспомните про модуль Memoize. А ленивые списки и прочие есть и у Perl, например: Data::Lazy, Scalar::Defer, Object::Lazy, Tie::Scalar, Tie::StdScalar и даже DBIx::LazyMethod.

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

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

Многие не в силах выдержать это, ломаются – бреют голову, посыпают ее пеплом и уходят в монастырь (http://perlmonks.org). Там они в спокойной обстановке, вдалеке от суетного мира занимаются каллиграфией, то есть обфускацией (http://www.perlmonks.org/index.pl?node=Obfuscated Code).

Лень привела также к тому, что Perl является сосредоточением множество закорлючер и заклинаний. (Про семейство APL языков скромно умолчу.) И все это преподноситься под соусом “cуществует более одного способа сделать это”. Да ни один силач не поднимет книгу Perl рецептов.

А посмотрите, что Perl программисты сделали с совершенной и строгой концепцией Объектно-Ориентированного программирования! Ну разве это объекты? Правда Damian Conway (Tie::SecureHash, Class::Contract) пытался образумить Perl программистов, да что толку. Как-бы в ответ, появились модули, позволяющие делать всевозможные хаки, залезать в чужие области видимости и менять значения локальных структур! Ужас! (Перечень модулей, опасных для неокрепших духом, вырезан цензором.) Хотя, надо отдать должное, на основе этих идей появилась реализация Аспектно-Ориентированного программирования на Perl (Aspect).

Так что, программисты, берегитесь Perl – это очень опасный язык! Когда Perl проникнет в ваши умы, вы никогда больше не сможете нормально писать на других языках программирования. И этому также будет способствовать то, что Perl из всех языков программирования дальше всего находиться от компьютера и ближе всего к человеку. Не дай Бой, вы из программиста станете писателем или поэтом. А ведь были уже прецеденты, например, королева поэзии Perl Sharon Hopkins.

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

Вы спросите, как же мне, использующему Perl, удалось избежать его пагубного влияния? А у меня иммунитет – я же не программист. Я химик! :-)

Оригинал – http://laziness-impatience-hubris.blogspot.com/2008/02/perl.html

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

Руби?

У него неограниченная грамматика? В него можно также просто встроить систему комментирования из другого языка? Можно за 2 вечера написать свою объектную систему?

Нет

helios ★★★★★
()

Чем меньше перла ты напишешь, тем меньше потом людям разбираться во write-only шлаке, который внезапно сломался.

Deleted
()

после perl`a мне было легко на php кодить

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

Ох, я смотрю, это уже целая философия... OK, я нашел Camel book (с переводом, правда), буду курить потихоньку.

Чем меньше перла ты напишешь, тем меньше потом людям разбираться во write-only шлаке, который внезапно сломался.

Не волнуйся, моего кода ты не увидишь. Да и вряд ли вообще кто-то увидит кроме моего несчастного Debian.

IceAlchemist
() автор топика
Ответ на: комментарий от zz
package TurnOnMyOwnFunctions;

    sub import
        {
            my $call = caller;
            *{$call . '::sayHello'} = sub { print 'hello' };
            *{$call . '::perlShell'} = sub { print eval while <> }
        }

1;

Теперь, подключив в любом модуле TurnOnMyOwnFunctions в нём появляются sayHello и perlShell.

use TurnOnMyOwnFunctions;

sayHello;
perlShell;
helios ★★★★★
()

Вопрос тем, кто НЕ знает Perl:

%a = {1 => 2, 3 => 4};
print '%a is ' . %a;

print "\n";

%b = (1=>2, 3=>4);
print '%b is ' . %b;

А теперь не глядя в консоль, что этот скрипт напечатает?

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

Убивать.

Убивать на perl тоже легко :)
Я не использую данную возможность. В своё время экспериментировал - использовал, но не прижилось. Однако, мир^W perl прекрасен в своём многообразии!

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

Вопрос тем, кто НЕ знает Perl

А ты сначала напиши тем, кто не знает perl, что такое «%» и анонимный хеш.

helios ★★★★★
()
Ответ на: Осторожно, Perl! от helios

Интересные статейки! ОК, мне нравится ^_^

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

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

Изверг!
Убивать.
Чем меньше перла ты напишешь, тем меньше потом людям разбираться во write-only шлаке, который внезапно сломался.

Плохой день?

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

Честно говоря ждал Moose какой-нибуть. Я так тебе в любом языке(в питоне например) нагенерирую функций с произвольными рантайм именами.

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

В идеале надо вот как: Learning Perl (книжка с ламой), Intermediate Perl (книжка с альпакой), Mastering Perl (там тоже какое-то копытное, да ещё с детёнышами).

Очень крутая трилогия, вот собираюсь последнюю докупить, между тем пока нахожусь на середине первой (регулярки мммать).

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

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

Правильный подход - если файл не открылся, то и остальная часть проги будет выполняться криво. «Лучше громко упасть, чем с хорошей миной продолжать совершать ошибки». Да и вообще клёво, что функции возвращают информацию о том, как они выполнились. Unix-way!

Правда, новичков может удивить

print print 2; 

print то тоже возвращает своё состояние (1), которое будет напечатано первым принтом.

«сделай то-то, если сегодня пятница»

О, я вообще от подобных штук в perl тащусь. Код становится более понятным, когда используешь такое (правильно).

Пример

sub isPhoneNumber
    {
        my $str = shift; # получили первый параметр
                         # - строку, которую проверяем

        # сопоставляем с шаблонами
        return 1 if $str =~ /^\d{11}$/;
        return 1 if $str =~ /^\+\d{11}$/;
        return 1 if $str =~ /^\d-\d{3}-\d{7}$/;
        
        return 0;
    }

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

Mystra_x64

Чем меньше перла ты напишешь, тем меньше потом людям разбираться во write-only шлаке, который внезапно сломался.

write-only шлак можно писать на любом ЯП. Питон вас таки от этого не спасёт со всеми своими обязательными идентами. Могу например свой быдлокод показать (: (но не хочу, и не буду)

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

IceAlchemist

Ох, я смотрю, это уже целая философия... OK, я нашел Camel book (с переводом, правда), буду курить потихоньку.

правильно - perl годный ЯП. пайтон тоже годный, кстати. В своей нише.

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

helios

print то тоже возвращает своё состояние (1), которое будет напечатано первым принтом.

разве это «состояние», а не просто число символов?

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

Честно говоря ждал Moose какой-нибуть.

Меня в детстве лоси покусали - не люблю Moose. Использовал, но не люблю.

Я так тебе в любом языке(в питоне например) нагенерирую функций с произвольными рантайм именами.

Также элегантно? Тут вся фишка в том, что сказал «используй мои функции», вызвался import, который взял пакет вызвавшего и улучшил его.

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

Оу, а вот и регэкспы ^_^' ОК, я с ним разберусь, хотя эти, судя по всему реагируют на номера вида «84951234567», «+74951234567» и «8-495-1234567»

А насчет пятницы, я подумал, что это может выглядеть так:

#!/usr/bin/perl

@date = `date`;

print "Yay!\n" if $date[0] =~ "Вск";

хотя я только начал и наверняка сделал это криво и неправильно.

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

разве это «состояние», а не просто число символов?

Именно состояние. Если STDOUT (или куда ты хочешь писать) будет недоступен, к примеру, print вернёт 0.

gosha@bugov:~/tmp$ perl -e 'print "!", print "World", print "Hello"'
HelloWorld1!1
helios ★★★★★
()

Стоит ли браться за Perl?

Стоит. Только Перл сможет научить тебя всегда искать самое красивое решение и избавит от безответственности.
Перл в наименьшей степени идиот-friendly, потому что не содержит искусственных ограничений, не позволяющих наделать глупостей. Так что ты либо скоро сам научишься не делать глупостей, либо, если не сможешь убить в себе индусокодера, перелезешь на какой-нибудь петон и будишь флудить на ЛОРе в каждой теме о Перле, что у него код write-only и вообще он RIP. =)

kranky ★★★★★
()

это тот в котором надо знать приоритетность более 20 термов и операторов?

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

helios

Именно состояние. Если STDOUT (или куда ты хочешь писать) будет недоступен, к примеру, print вернёт 0.

Угу. Это и есть недостаток perl'а - в этом случае надо возвращать вообще не неотрицательное число, а что-то иное. Ну например -1 (как в С). Ибо ситуация, когда напечатано 0 символов - вполне штатная, и допустимая.

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

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

Два чая этому коту!

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

Угу. Это и есть недостаток perl'а - в этом случае надо возвращать вообще не неотрицательное число, а что-то иное. Ну например -1 (как в С). Ибо ситуация, когда напечатано 0 символов - вполне штатная, и допустимая.

А? Это всего лишь true и false. И не более. Выполнилась - не выполнилась. Никто не обещал тебе возвращать длину напечатанной строки.

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

Ахаха, только начал а уже придумал костыль ^_^

Ладно, покурю книжку и узнаю побольше функций, фич и прочего...

IceAlchemist
() автор топика
Ответ на: комментарий от drBatty
print print
1

- напечатано 0 символов, вернул 1 (всё ок), первый принт напечатал результат 2ого(«1»);

open F, "does_not_exist.exe";
print print F "Windows must die";
close F;

open F, "does_not_exist.exe";
print int print F "Windows must die";
close F;

//0

Вру, когда не может напечатать, возвращает undef.

helios ★★★★★
()

perl хороший, а ТС — плохой.

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

perl это самый удобный язык для написания скриптов работающих с бд

не могли бы вы привести кусочек такого кода. интересно сравнить, как оно выглядит по отношению к SQLAlchemy

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

а был-ли его код самый быстрый?

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

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

helios

А? Это всего лишь true и false. И не более. Выполнилась - не выполнилась. Никто не обещал тебе возвращать длину напечатанной строки.

да? а если вывести hello world, тоже 1 вернёт?

drBatty ★★
()

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

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