Peter Fleck wrote:
> 
> I swear that some day I will understand references. In the meantime...
> 
> I wrote some perl that used a hash where each value was a reference
> to an array. No problem. Here is the segment from within a foreach
> loop that populates the hash.
> 
>         @storedates = ($sdates, $idates);
>         $datestore{$oldgrantid} = [EMAIL PROTECTED];
> 
> I thought this would work. But it doesn't. I end up with the same
> array reference for each key and the same values, the last ones of
> the series.
> 
> The fix was to change it to:
> 
>         $datestore{$oldgrantid} = [$sdates, $idates];
> 
> Using the same array reference name (@storedata) does not work even
> though the values are different.
> 
> I'm interested in a bit more explanation about why this didn't work.
> I thought I was 'getting' it until this latest struggle.

It depends on the scope of the variable.  You do have warnings and
strict enabled don't you?

my @array1;  # file scope

foreach ( @something ) {

    my @array2;  # block scope

    # In the loop both @array1 and @array2 are visible
    # The address of @array1 stays the same for each
    #     iteration of the loop.
    # The address of @array2 is different for each
    #     iteration because my() creates a new variable
    }

If you are not using my() to declare the variable inside the loop then
the variable will always have the same address.


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to