четверг, 27 августа 2009 г.
Perl - предотвратить случайное изменение данных
Когда необходимо предотвратить случайное изменение входных данных в плагине, можно либо передать копию данных, воспользовавшись модулем Clone, либо сделать данные неизменяемыми. Для последнего наиболее оптимальным является использование модуля Data::Lock или Hash::Util (идет в стандартной поставке Perl).
четверг, 20 августа 2009 г.
Perl7 за 7 секунд :-)
Сейчас идет разработка Perl6, а используется Perl5:
Per6, Perl6 - все хотят Perl6. А я хочу Perl7! :-)
Не вышло... :-(
А если постараться?
Ура!!! Perl7 существует!!! На радостях пошел купятся в море!!!
> 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 можно не только проникнуть за стены крепости-замыкания, но и изменить непосредственно то, что находиться за этими стенами.
Рассмотрим пример:
В этом примере мы изменили значение переменной $foo c 3 на 5.
Внимание, если эта переменная не read-only, то модификацию замыкания необходимо производить следующим способом:
Как говориться в старой военной мудрости: "Нет такой крепости, которую не возможно было бы взять".
Правда в 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 года
Подписаться на:
Сообщения (Atom)