April 30th, 2014

Book

(no subject)

Сегодня поделюсь своим продакшен-кодом :)
sub getFromCacheRef
{
    my ($cache, $key, $newSub) = @_;
    $$cache{$key} = &$newSub($key) if not exists $$cache{$key};
    return \($$cache{$key});
}
Использовать надо как-то так:
use Data::Dumper;

my %counts;

foreach my $x (qw(a b a a c c))
{
	${getFromCacheRef(\%counts, $x, sub { return 0 })}++;
};

print Dumper \%counts;
Напечатается
$VAR1 = {
          'c' => 2,
          'a' => 3,
          'b' => 1
        };
Часто в хеше хранятся ссылки, или же знасение не надо модифицировать. Поэтому есть компаньон getFromCache(). Оказалось, что это повсеместно полезная конструкция, применимая для всего :)