This section provides a tutorial example on how to use hard references with the dereference operator like EXPR->[*], EXPR->{*}, or EXPR->(*) for array elements, hash elements and function calls.
As mentioned in the previous section,
if a hard reference is used with a subscription of [*], {*}, or (*), the dereference operator,
-> can be used between the reference expression and the subscription.
Note that subscription [*] is used for array elements, {*} is used for hash elements, (*) is used for function calls.
The following tutorial program shows you some examples. Note that you can not use -> to
access array slices.
#- HardRef3.pl
#- Copyright (c) 1999 by Dr. Herong Yang, http://www.herongyang.com/
#
$foo = 0;
@foo = (0);
%foo = (k,0);
$refs = \$foo;
$refa = \@foo;
$refh = \%foo;
$reff = \&foo;
@refl = (\$foo, \@foo, $refh, $reff);
$refa->[0] = 30; print "$foo[0]\n";
$refa->[0,1] = (40,41); print "$foo[0]\n"; # not working
$refh->{'k'} = 60; print "$foo{k}\n";
$refh->{'k','l'} = (70,71); print "$foo{k}\n"; # not working
$reff->(80);
(\@foo)->[0] = 130; print "$foo[0]\n"; # \@foo->[0] is bad
('bla',\%foo)->{'k'} = 160; print "$foo{k}\n";
$refl[3]->(180);
sub foo {print "$_[0]\n";}