in reply to A question of perlish elegance on array loop

Shouldn't
$#{@{$object_ref->{array_ref}}}
be
$#{$object_ref->{array_ref}}
(The last index of the array referenced by $object_ref->{array_ref}.)

By eliminating multiple instances of $object_ref->{array_ref},

foreach (0..$#{$object_ref->{array_ref}}) { printf("%d %s\n", $_, $object_ref->{array_ref}[$_]); }

might be more readable as

my $array = $object_ref->{array_ref}; foreach (0..$#$array) { printf("%d %s\n", $_, $array->[$_]); }
You might also be interested in
my $array = $object_ref->{array_ref}; foreach my $idx (0..$#$array) { foreach my $ele ($array->[$idx]) { printf("%d %s\n", $idx, $ele); } }