Здесь чувствуется рука Москвы

Jul 27, 2009 17:05


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

Вместо традиционного:

# loading
if (open(FILE, ") {
chomp;
my ($url, $title) = split("\t");
$titles{$url} = $title;
}
close(FILE);
} else {
die "Can't open file: $!";
}

# do something

# saving
if (open(FILE, ">:encoding(utf-8)", $ofile)) {
foreach (keys %titles) {
print FILE "$_\t$titles{$_}\n";
}
} else {
die "Can't write file: $!";
}

Мне гораздо больше нравится писать нечто вроде:

# loading
open(FILE, ";
close(FILE);

# do something

# saving
open(FILE, ">:encoding(utf-8)", $ofile) || die "Can't write file: $!";
print FILE
join "\n",
map { join "\t", ($_, $titles{$_} || '') }
keys %titles;
close(FILE);

Да ещё и внутри 'do something' вместо циклов для обработки зафигачить какую-нибудь цепочку типа:

# filtering
my %seen = ();
my @urls =
grep { ! $seen{$_}++ } # filter uniq
map { s#^http://##; $_ } # cut http prefix from url
keys %titles;

&do_something_good foreach @urls;

И Schwartzian transform ещё тоже рулит. А главное, мне реально так нравится. Явные циклы и ветвления не нужны, когда это же можно сказать более естественным образом.

Всё-таки уважаю подход создателей Перла про There's more than one way to do it.

perl

Previous post Next post
Up