четверг, 27 августа 2009 г.

Perl - предотвратить случайное изменение данных

Когда необходимо предотвратить случайное изменение входных данных в плагине, можно либо передать копию данных, воспользовавшись модулем Clone, либо сделать данные неизменяемыми. Для последнего наиболее оптимальным является использование модуля Data::Lock или Hash::Util (идет в стандартной поставке Perl).

четверг, 20 августа 2009 г.

Perl7 за 7 секунд :-)

Сейчас идет разработка Perl6, а используется Perl5:

> perl -e 'print "This is Perl v$]!\n"'
This is Perl v5.008008!

Per6, Perl6 - все хотят Perl6. А я хочу Perl7! :-)

> perl -e '$] = 7; print "This is Perl v$]!\n"'
Modification of a read-only value attempted at -e line 1.

Не вышло... :-(
А если постараться?

> perl -e 'Internals::SvREADONLY($],0); $]=7; print "This is Perl v$]!\n"'
This is Perl v7!

Ура!!! Perl7 существует!!! На радостях пошел купятся в море!!!

четверг, 13 августа 2009 г.

Perl Closure - последний бастион пал

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

Правда в Perl6 частично отходят от этого принципа, но это лишь внешняя уступка современным объектно-ориентированным предрассудкам, которые легко обходятся при помощи ролей.

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

Однако на данный момент этот бастион пал.
При помощи новой версии модуля PadWalker можно не только проникнуть за стены крепости-замыкания, но и изменить непосредственно то, что находиться за этими стенами.

Рассмотрим пример:

use PadWalker;

sub foo {
my $foo = shift;
sub { print "$foo\n" };
}

my $foo = foo(3);
$foo->();

PadWalker::set_closed_over($foo, { '$foo' => \5 });
$foo->();

В этом примере мы изменили значение переменной $foo c 3 на 5.
Внимание, если эта переменная не read-only, то модификацию замыкания необходимо производить следующим способом:

PadWalker::set_closed_over($foo, { '$foo' => \ do { my $foo = 5 } });

Как говориться в старой военной мудрости: "Нет такой крепости, которую не возможно было бы взять".

четверг, 6 августа 2009 г.

Perl - когда наступит Рождество


  • Parrot 2 - начало 2010 года (по материалом Parrot рассылки для разработчиков)

  • Perl 6 - весна 2010 года (объявлено на YAPC::Europe 2009)

  • Parrot 3 - начало 2011 года