Привет. Помнится я Монсу обещал показать как "Это" и "Не множко другой перл"
Вот такая программа :
#!/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)[EMAIL PROTECTED];
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/
Makefile.PL
Description: Perl program
Refmonitor.pm
Description: Perl program
<<inline: Refmonitor.xs>>
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
