[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