in reply to Bizarre copy of ARRAY in leave at...

Actually, the problem is your syntax is bizarre :)

To get the highest index of an array from a reference to it the syntax should be $#{ $aref } not $#{ @$aref } which you have. The fact that your code works silently, is probably a bug:)

#! perl -slw use strict; sub get_size{ my ($aref ) = @_; return $#{@$aref}; } my @a = ( 1..10 ); print get_size( \@a ); __END__ P:\test>322384 9 P:\test>perl -d 322384.pl Loading DB routines from perl5db.pl version 1.22 Editor support available. Enter h or `h h' for help, or `perldoc perldebug' for more help. main::(322384.pl:9): my @a = ( 1..10 ); DB<1> s main::(322384.pl:11): print get_size( \@a ); DB<1> s main::get_size(322384.pl:5): my ($aref ) = @_; DB<1> s main::get_size(322384.pl:6): return $#{@$aref}; DB<1> s main::get_size(322384.pl:6): return $#{@$aref}; DB<1> s Bizarre copy of ARRAY in leave at 322384.pl line 6. main::get_size('ARRAY(0x19ede94)') called at 322384.pl line 11 Debugged program terminated. Use q to quit or R to restart, use O inhibit_exit to avoid stopping after program termination, h q, h R or h O to get additional info. DB<1> Config::DESTROY(c:/Perl/lib/Config.pm:1198): 1198: sub DESTROY { } DB<1> q #### change $#{@$aref} to $#{ $aref } P:\test>322384 9 P:\test>perl -d 322384.pl Loading DB routines from perl5db.pl version 1.22 Editor support available. Enter h or `h h' for help, or `perldoc perldebug' for more help. main::(322384.pl:9): my @a = ( 1..10 ); DB<1> s main::(322384.pl:11): print get_size( \@a ); DB<1> s main::get_size(322384.pl:5): my ($aref ) = @_; DB<1> s main::get_size(322384.pl:6): return $#{$aref}; DB<1> s main::get_size(322384.pl:6): return $#{$aref}; DB<1> s 9 Debugged program terminated. Use q to quit or R to restart, use O inhibit_exit to avoid stopping after program termination, h q, h R or h O to get additional info. DB<1> q

Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
Timing (and a little luck) are everything!

Replies are listed 'Best First'.
Re: Re: Bizarre copy of ARRAY in leave at...
by Anonymous Monk on Jan 20, 2004 at 02:02 UTC
    ...not $#{ @$aref } which you have.

    But he doesn't have {}, he has (), as in

    $round = [ 1 .. 10]; die $#( $round ); __END__ Missing comma after first argument to die function at - line 2, near " +);" Execution of - aborted due to compilation errors.