При печати ссылки на массив, хэш и т. д. что это за шестнадцатеричное число в скобках?
perl -e 'print []'
Дает вывод, например: МАССИВ (0x9acb830)
Что такое 0x9acb830? Если я снова напечатаю ту же ссылку, это число изменится.
При печати ссылки на массив, хэш и т. д. что это за шестнадцатеричное число в скобках?
perl -e 'print []'
Дает вывод, например: МАССИВ (0x9acb830)
Что такое 0x9acb830? Если я снова напечатаю ту же ссылку, это число изменится.
perl -le 'print [ ] for 1..5'
, где адрес изменяется, и запуском repeat 5 perl -le 'print [ ]'
, где он нет. Опять же, это тривиальный случай, и ваше утверждение слишком благоразумно, чтобы с ним не согласиться; более крупные программы имеют слишком много возможных путей кода, чтобы гарантировать детерминированные результаты на этом уровне. 02.01.2011 malloc()
— непредсказуемая тварь, наполненная самой черной магией. На самом деле, я удивлен, что он получает один и тот же адрес памяти от запуска до запуска на OSX. Но кто знает, что на самом деле представляет это число в современной операционной системе? 03.01.2011 Если вы снова напечатаете ту же ссылку, номер должен остаться прежним; число является фактическим адресом заголовка SV для упомянутой вещи.
Это в основном расположение памяти массива. Perl пытается сообщить вам, что вы пытаетесь напечатать ссылку, а не скалярное значение.
Попробуй это:
#! /usr/bin/env perl
use strict;
use warnings;
my @foo = qw(one two three four five);
print @foo . "\n"; #Prints the array in a scalar context (five items)
print \@foo . "\n";
print $foo[1] . "\n";
print \$foo[1] . "\n";
5
two
SCALAR(0x100804ff0)
ARRAY(0x10082ae48)
Обратите внимание, что когда я печатаю ссылку, Perl пытается сделать правильно. Вместо того, чтобы пытаться напечатать какое-то странное значение, он сообщает вам, что вы пытаетесь напечатать ссылку на скаляр или массив.
C:\>perl -MScalar::Util=refaddr -E "$test = []; say q!Stringified ref: !, $test; say q!refaddr: !, refaddr($test); say q!manually: !, hex(substr $test, index($test, q!(!) + 1, -1)"
02.01.2011ˋegrep -i 'thing(y|ies)' perl/pod/*.podˋ
приводит к 4 совпадениям в стандартном дистрибутиве src, если быть точным, в perl{58delta,func,guts,obj}.pod. Недавно я снова прибегал к thingy, но теперь забыл, где. 02.01.2011