in reply to Getting an Array Reference Into an Array

You want to make a local alias.

{ local *myArray = $myHash{ "tres" }; $myArray[ 99 ] = "luftballons"; }

Replies are listed 'Best First'.
Re^2: Getting an Array Reference Into an Array
by ikegami (Patriarch) on Jun 07, 2006 at 19:48 UTC

    Adding our @myArray allows the snippet to be used with use strict 'vars';.

    { our @myArray; local *myArray = $myHash{ "tres" }; $myArray[ 99 ] = "luftballons"; }
      Adding our @myArray allows the snippet to be used with use strict 'vars';.
      Yeah, I figured that I needed the our @myArray when I added the use strict; to the program.

      However, I tried the program with and without the local and it seems to work either way. Does the our @myArray remove the need for local? I've got the entire program below.

      use strict; use warnings; my %myHash; $myHash{"uno"} = "one"; $myHash{"dos"} = "two"; $myHash{"tres"}->[0] = "three-point-oh"; $myHash{"tres"}->[1] = "three-point-one"; $myHash{"tres"}->[2] = "three-point-two"; $myHash{"quatro"} = "four"; our @myArray; *myArray = $myHash{"tres"}; $myArray[3] = "three-point-three"; $myArray[4] = "three-point-four"; $myArray[5] = "three-point-five"; foreach my $key (keys(%myHash)) { if (ref($myHash{$key}) eq "ARRAY") { for (my $item = 0; $item <= $#{$myHash{$key}}; $item++) { print qq($key->).qq([$item] = "$myHash{$key}->[$item]"\n); } } else { print qq($key = "$myHash{$key}"\n); } }

        No, but since you've omitted the local declaration the aliasing will persist after the scope exits. The point of using local and the surrounding block is to ensure that @myArray goes back to whatever value it had before you aliased it.