Привет.

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

Вот такая программа :
#!/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/

Attachment: Makefile.PL
Description: Perl program

Attachment: Refmonitor.pm
Description: Perl program

<<inline: Refmonitor.xs>>

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить