in reply to Re: dimensioning arrays
in thread dimensioning arrays

@{shift} may means @{'shift'} or @shift : it's ambiguous.

be more sharp by adding "()" after shift.
... my $nx = shift; my @a = @{shift()}; # This should resolve your problem my $ny = shift; ...
________________________
Hope this helps

Replies are listed 'Best First'.
Re: Re: Re: dimensioning arrays
by Anonymous Monk on Feb 16, 2001 at 16:54 UTC
    Thanks, Now it works.
    It would be nice for me to have a general subroutine
    sub initialise(\@dimensions,$initialisation_value,\@matrix)
    that gives back an initalised matrix of n-dimensions. I'll try as learning exercise, if it is not straightforward for someone to write it down here. There's a lot to learn from a snippet of code..:)
    rob
      This is a solution. Not very efficient though (sorry)... but I found it interesting.

      sub ar_init { my $shift = shift ; (defined $_[0]) ? [ map { ar_init(@_) } (1..$shift) ] : $shift ; } my $array_ref = ar_init(3, 2, 4, 'pop '); print $array_ref->[2][0][3]

      Since lists are 'flattened' in subroutine calls, you could put the dimensions in an array @dim = (3, 2, 4) and call it using ar_init(@dim, 'foo') - it would have the same effect. Note that the whole thing is constructed using references - you'll need to understand references for whatever solution you use. I like the explanation of reference syntax in _Effective_Perl_Programming_.