LINUX.ORG.RU
ФорумTalks

таки Perl


0

1

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

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

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

helios

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

а у сишника значит на это мозгов не хватило? Ну а причём тут перл? ЕМНИП такой спор уже был на UFO, на С таки быстрее получается (всегда ваш, К.О.)

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

а у сишника значит на это мозгов не хватило? Ну а причём тут перл? ЕМНИП такой спор уже был на UFO, на С таки быстрее получается (всегда ваш, К.О.)

Пока Сишник будет писать кеш, перлист уже весь коньяк выпьет.
А перл тут при том, что данный пример иллюстрирует 2 из 3х добродетелей (высокомерие и леность), так свойственных Perl программистам.

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

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

Полностью согласен. Думал, Я один такой :)

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

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

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

Perl удобен тем, что он заточен под работу со списками. А таблицы это, по-сути и есть списки.

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

или
localtime=~/Sat/ and print «Shalom»;
что лучше читается

стараюсь избегать конструкций if...else. как-то не по-перловски :)

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

А что, тоже вариант — будет орать пока не наступит пятница :)

echo "Luke, I am your father" | perl -e '
if ( <> =~ /Luke, I am your father/ )
{
    print "N";
    print "o" until time % 2
}'
helios ★★★★★
()
Ответ на: комментарий от helios

helios

Пока Сишник будет писать кеш, перлист уже весь коньяк выпьет.

у сиплюсплюсника ваще-то есть STL, там разве такого нет?

helios

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

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

for(i=0; i<n; i++)
  sum=a+b, a=b, b=sum;

будет работать медленнее вашего?

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

Да что вы хотите доказать?
То что на си можно написать так, что оно будет решать задачу быстрее?
Ну да, это очевидно --> спор глупый.
Другое дело, что на Сях писать намного-намного геморнее.

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

Bad_ptr

Да что вы хотите доказать?

разве это не очевидно? То, что автор перлового скрипта болен LISP'ом головного мозга, а LISP'овые конструкции одинаково плохо ложатся как на perl, так и на C.

Bad_ptr

То что на си можно написать так, что оно будет решать задачу быстрее?
Ну да, это очевидно --> спор глупый.

нет. также можно написать и на perl'е, если не быть психически больным LISP'ом.

Bad_ptr

Другое дело, что на Сях писать намного-намного геморнее.

этот код можно выполнять и в PHP, только $ перед каждой переменной надо поставить. Вот сравнивать PHP и perl - согласитесь, куда как корректнее.

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

Intermediate Perl

Ненужен. После Lama book надо идти программировать. Когда возникнут вопросы - курить Camel book. На вопросы, на которые не отвечает Camel book, надо искать ответы в perldoc. Всё.

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

`date`

Зло. Не делай так. Не делай этого никогда.

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

ОК, ОК. Курю Ламабук и выполняю упражнения:

#!/usr/bin/perl

use warnings;

@ponies = qw< Applejack Rarity Fluttershy Rainbow Pinkie Twilight >;

print "Enter some numbers in the range of 1-6:\n";
chomp (@numbers = <STDIN>);

foreach (@numbers) {
        print "Pony: $ponies[$_-1]\n";
}
IceAlchemist
() автор топика
Ответ на: комментарий от Xellos

Кстати о варнингах, пока что при попытке use strict он натычет во все переменные и требует явно указать package. А я пока не знаю что такое package ._.

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

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

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

Суть в том, что у тебя переменная никак не объявлена. Она встречается в скрипте первый раз, и чисто теоретически может принадлежать как пакету main, так и ещё кому-то. Неважно, что больше у тебя никого нет - strict на то и strict, чтобы делать всё по правилам.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos
print "Поня" . "тно";

Просто где-то вычитал на ЛОРе что правильно писать на перле с use warnings и use strict, а в ламабуке про strict и области видимости пока ничего не говорили (дополз до главы 4 только).

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

бороду я твою заметил, если это ты ;)
может теперь все-таки скажешь что-нибудь по делу.
часто пишу что то в роде

my $var;
...
$var && do {
...
} || do {
...
}

но

if(my $var = ...) {
...
} else {
... $var ...
}

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

%a = {1 => 2, 3 => 4};

что-то здесь не так. в ключе будет строково представление ссылки на хеш со значением undef. это некорректное выражение

chg ★★★★★
()
Ответ на: комментарий от beka
Reference found where even-sized list expected at - line 2.

Добавил строчку use Pony::Object; в начало.

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

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

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

Оки, вот зачем оно нужно ^__^

Хотя пока объявление переменных прямо «по ходу» выглядит удобно... А со strict отдельно придется?

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

use strict; делает твой код «строгим». Это полезно во многих ситуациях. Например:

my $from = <>; # ввёл "helios"
say "Hello $form"; # получил "Hello "

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

Отключать use strict; (no strict) следует только тогда, когда планируешь совершить что-нибудь дьявольское :) (а ля «снятие печати Кромвеля до первого уровня»).

Также my полезна, когда хочешь использовать переменную только в какой-то области видимости (область видимости - блок {}).

Например:

$i = 2;

for my $i ( 0..9 )
{
    say "Ку!";
    my $j = $i;
}

# после цикла $i всё так же 2,
# а $j всё так же не определён.
helios ★★★★★
()
Ответ на: комментарий от helios

так можно без блоков
time % 2 and print «yes» or print «no»;

а у тебя не блоки, а анонимные хеши получились :)

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

Не понял посыла мессаджа.
use strict вообще не в тему, use warning не спасет от преобразования хэша в строку.
А вот Data::Dumper в обоих случаях поведет себя корректно.

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

а у тебя не блоки, а анонимные хеши получились :)

Есть такое :)

sub _{{{{{ print for fun }}}}}_

helios ★★★★★
()
Ответ на: комментарий от beka
gosha@bugtop:~$ perl -e 'use warnings; %a = {1 => 2, 3 => 4};'
Name "main::a" used only once: possible typo at -e line 1.
Reference found where even-sized list expected at -e line 1.

Смысл в том, что warning вылезет и ты не ошибёшься в скобках.

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

> Просто где-то вычитал на ЛОРе что правильно писать на перле с use warnings и use strict, а в ламабуке про strict и области видимости пока ничего не говорили (дополз до главы 4 только).

тем не менее, привыкай к директиве «use strict;» с самого начала, сильно сэекономит тебе время в будущем. в последних версиях (5.12+), кстати, она включена по дефолту:

$ perl -e 'use v5.10; print $x'
$ perl -e 'use v5.10; use strict; print $x'
Global symbol "$x" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
$ perl -e 'use v5.12; print $x'
Global symbol "$x" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
$ _
arsi ★★★★★
()
Ответ на: комментарий от IceAlchemist

без my и strict где-то на 500 строке все превращается в кашу :)

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

ты как обычно не читаешь что тебе пишут

Why so serious? :)

имеется в виду print «str» . %b;

Вас смущает, что хеш в скалярном контексте возвращает capacity? А то, что списки возвращают по сути то же самое, Вас не смущает?

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