[perl] power of chaos
От: frogkiller Россия  
Дата: 06.02.09 20:09
Оценка: 8 (1)
Вот уже больше года активно изучаю perl. И чем дальше в лес — тем толще партизаны Я впечатлён обилием синтаксического сахара и невиданным богатством способов прострелить ноги. Оцените код (и это без разнообразных библиотек!):
#!/usr/bin/perl -w

package olap;
use strict;

use overload '%{}' => sub { ${shift()}->[1] },
             '@{}' => sub { ${shift()}->[0] };
sub new {
    my ($p, $a) = (shift, [@_]);

    my %h; tie %h, $p, $a;
    bless \[$a, \%h], $p;
}   

sub add { push @{shift()}, shift }

sub TIEHASH { my $p = shift; bless \shift, $p }
sub FETCH {
    my ($a, $s) = (${shift()}, shift);
    new olap grep { eval $s; } @$a;
}   

1;

package main;
use strict;

my $bar = new olap ([3,4,5,6], [3,4,7,6], [3,9,5,6], [qw(a b c d e)], {a => 5, b => 6, c => 7}, {a => 5, c => 8});

print ${$bar}{'$_->[0] eq 3'}{'$_->[2] eq 5'}[1][1];
print "\n";
print $bar->{'$_->{a} eq 5'}{'!defined($_->{b})'}[0]{c};

1;


Кому непонятно, объясняю — создаётся массив произвольных структур, из которых можно делать любое количество выборок по разным критериям с помощью последовательных {xxx} или же просто обращаться как с обычным массивом. Фишка в том, что здесь не используется постоянный grep {xxx} между выборками — эта функциональность перенесена в перегруженную операцию %{}. Как следствие — естественный (т.е. слева направо) порядок применения фильтров.

Боюсь представить, во сколько строк кода это бы вылилось, если я "с нуля" писал то же самое на своём любимом c++.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: [perl] power of chaos
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 09.02.09 08:41
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Вот уже больше года активно изучаю perl. И чем дальше в лес — тем толще партизаны Я впечатлён обилием синтаксического сахара и невиданным богатством способов прострелить ноги. Оцените код (и это без разнообразных библиотек!):


Это еще что Just another Perl hacker
Re[2]: [perl] power of chaos
От: frogkiller Россия  
Дата: 09.02.09 12:51
Оценка: :)
Здравствуйте, achmed, Вы писали:

A>Это еще что Just another Perl hacker


Это, да, конечно, но там стреляют в ноги исключительно с целью их прострелить...
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: [perl] power of chaos
От: Кодёнок  
Дата: 09.02.09 14:56
Оценка: +1
Здравствуйте, frogkiller, Вы писали:

F>Вот уже больше года активно изучаю perl. И чем дальше в лес — тем толще партизаны Я впечатлён обилием синтаксического сахара и невиданным богатством способов прострелить ноги.


Я по этой причине три года назад перешел на питон навсегда. У меня были краулеры для нескольких сайтов, и шелл-скрипты для обработки БД, которые раз в полгода надо было править, и мне надоело каждый раз медитировать на них по часу перед внесением изменения.

F>Боюсь представить, во сколько строк кода это бы вылилось, если я "с нуля" писал то же самое на своём любимом c++.


На питоне раза обычно в два больше чем на перле, зато через полгода ты не утратишь понимание, что там написано.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.