[Moscow.pm] Эх .. знали бы что у перла внутри - перешли бы на питон.

Vany Serezhkin ivan на serezhkin.com
Вт Дек 9 10:37:10 PST 2008


Привет.

Помнится я Монсу обещал показать как "Это" и "Не множко другой перл"

Вот такая программа :
#!/usr/bin/perl
use strict;
use Refmonitor;

my $a=new RefWatcher;
my @b=(\$a)x4;
while (@b) {
    print "Start another undef\n";
    shift @b;
}
print "Done Undef\n";
die;

package RefWatcher;
sub new {print "new RefWatcher\n"; return bless {junk=>'somedata'};}
sub REFCHANGE {
    my ($self, $references)=@_;
    my $There_is_safe_to_reference_self=\$self;
    undef $There_is_safe_to_reference_self; # and dereference
    print "$self -> REFCHANGE() now $references references\n";
}

Делает :
vany:~/src/refmonitor$perl test.pl
new RefWatcher
RefWatcher=HASH(0x2850c54c) -> REFCHANGE() now 5 references
Start another undef
RefWatcher=HASH(0x2850c54c) -> REFCHANGE() now 4 references
Start another undef
RefWatcher=HASH(0x2850c54c) -> REFCHANGE() now 3 references
Start another undef
RefWatcher=HASH(0x2850c54c) -> REFCHANGE() now 2 references
Start another undef
RefWatcher=HASH(0x2850c54c) -> REFCHANGE() now 1 references
Done Undef
Died at test.pl line 12.

В результате написания этого безобразия которое "давайте в  репозитории 
этого не будет" (с) ... начальник нашего репозитория.
Пришлось понять как работает i386, att asm, gdb и ещё куча матерных слов.
То что мэджиком, как я надеялся, туда не попасть, и на скаляр типа 
объект SvROK говорит что не RV.
Вообщем я не знаю как к всему этому относится, макрос на макросе и 
макросом погоняет.
Большинство макросов не экспортированы, а нужны при хаченьи перла, 
пришлось копипастить.

Вообщем всё в аттаче, раскажите, работает ли на линуксе и на amd64 - 
вроде получилось кросплатформенно, правда пока только для интела.

И ещё, место ли такой упячке на цпане ?





-- 
Ivan B. Serezhkin
Spamooborona, Yandex. http://so.yandex.ru/

----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: Makefile.PL
Type: application/x-perl
Size: 272 bytes
Desc: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081209/9f8058bd/attachment.bin>
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: Refmonitor.pm
Type: application/x-perl
Size: 331 bytes
Desc: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081209/9f8058bd/attachment-0001.bin>
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: Refmonitor.xs
Type: image/x-xbitmap
Size: 3646 bytes
Desc: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081209/9f8058bd/attachment.xbm>


Подробная информация о списке рассылки Moscow-pm