[Moscow.pm] Scalar::Util::weaken
Ruslan Zakirov
ruz на bestpractical.com
Пн Мар 3 05:00:55 PST 2008
2008/3/3 Ruslan Zakirov <ruz на bestpractical.com>:
> #!/usr/bin/perl
> use Devel::Peek;
> my %count;
> my $a;
> for(1..4)
> {
> $a = {};
> print STDOUT $_,' ', $a, "\n";
> "$a";
>
> }
> print "\n\n\n";
> print %count;
>
> для шеа вызывается stringify, который строет строку, а потом ссылку на
> нее записывает в PVHV, а по каким причина нельзя использовать после
> этот скаляр не понятно.
Хотя все не так. Ссылка на строку не записывается. Почему-то
выделяется массив под ссылки на элементы во время стрингификации, хотя
мы и не трогаем его содержимое (не есть гут). После вся память
возвращается системе (если без mymalloc), а система соответственно
выделяет нам новые адреса, а уж какие это ей решать.
>
> Так тоже интересно:
>
> #!/usr/bin/perl
> use Devel::Peek;
> use Scalar::Util qw(refaddr);
> my %count;
> my $a;
> for(1..10)
> {
> $a = {};
> print STDOUT $_,' ', $a, "\n";
> $count{refaddr($a)}++;
> }
> print "\n\n\n";
> while (my ($k, $v) = each %count ) {
> printf "0x%x - %d\n", $k, $v;
> }
>
>
>
> 2008/3/1 Denis Evdokimov <evdokimov.denis на gmail.com>:
>
>
> > Тут так же самая разница:
> > >
> > > #!/usr/bin/perl
> > >
> > > my %count;
> > > my $a;
> > > for(1..100)
> > > {
> > > $a = {};
> > > print $_,' ', $a, "\n";
> > > # $count{$a}++; # Вот эта строка
> > > }
> > >
> > > print "\n\n\n";
> > > print %count;
> > >
> >
> > И правда, но откуда эта разница - Вот основной вопрос.
> >
> >
> > ______________________________________________________________________
> > Moscow.pm mailing list
> > moscow-pm на pm.org | http://moscow.pm.org
> > http://mail.pm.org/mailman/listinfo/moscow-pm
>
>
>
> --
> Best regards, Ruslan.
>
--
Best regards, Ruslan.
Подробная информация о списке рассылки Moscow-pm