, .
, , . , , , .
, , , Perl.
, , , , , , . - , $$$$ref:
my $string = 'Buster';
some_sub( \$string );
sub some_sub {
my $ref = shift;
some_other_sub( \$ref );
}
sub some_other_sub {
my $ref = shift;
yet_another_sub( \$ref );
}
sub yet_another_sub {
my $ref = shift;
print "$$$$ref\n";
}
, , , , . , , , . , $${ } .
, , , , -, .
- , - 1. :
my $j = 'foo';
my $e = 'baz';
my $h = [];
$h->[1] = { foo => 'bar' };
print "1: $h->[1]{$j}\n";
. $${ ... }{proxy_cache}, -:
$h->[1] = {
foo => \ { proxy_cache => 'duck' }
};
print "2. $${ $$h[1]{$j} }{proxy_cache}\n";
, , , -, . , . :
sub some_sub {
my $hash = shift;
$h->[1] = {
foo => \ $hash
};
. - ( duck):
$h->[1] = {
foo => \ { proxy_cache => { $e => 'quux' } }
};
print "3. ${ $${ $$h[1]{$j} }{proxy_cache} }{$e}\n";
- -:
$h->[1] = {
foo => \ {
proxy_cache => {
$e => \ { fetch_handler => 'zap' }
}
}
};
print "4. $${ ${ $${ $$h[1]{$j} }{proxy_cache} }{$e} }{'fetch_handler'}\n";
, ownerDocument :
$h->[1] = {
foo => \ {
proxy_cache => {
$e => \ { fetch_handler => {
ownerDocument => sub { print "Buster\n" },
}
}
}
}
};
print "5. $${ ${ $${ $$h[1]{$j} }{proxy_cache} }{$e} }{'fetch_handler'}{'ownerDocument'}\n";
- CODE(0x.......), .
, , - . {$e}:
print "6. ";
print $${ $${ $h->[1]{$j} }{proxy_cache}{$e} }{'fetch_handler'}{'ownerDocument'};
print "\n";