Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Scoped Variables in a Recursive Function.

by extremely (Priest)
on Sep 29, 2000 at 04:48 UTC ( #34544=note: print w/ replies, xml ) Need Help??


in reply to Scoped Variables in a Recursive Function.

This is the sort of code where you wish pass-by-reference was more obvious to the beginning coder.

sub Merge(@) { my @array = @_; MergeSort (\@array, 0, $#array); return @array; } sub MergeSort($$$) { my $arrref = shift; my $first = shift; my $last = shift; if ($last>$first) { my $mid = int(($last+$first)/2); MergeSort($arrref, $first, $mid); MergeSort($arrref, $mid+1, $last); my @b; @b = ( @{$arrref}[$first..$mid], @{$arrref}[reverse($mid+1..$last) +] ); my ($i, $j, $k) = (0, $last-$first, $first); for (; $k<=$last; $k++) { $arrref->[$k] = ($b[$i]<$b[$j]) ? $b[$i++] : $b[$j--]; } } }

As others have stated nesting subroutines Doesn't Do What You Expect. =) The enclosure method is nice but you should get used to passing references where you can. In this case Merge makes a copy of the data and then passes a reference on to MergeSort to do with as it pleases. Each recursive level of MergeSort passes the reference down to the next level. Neat and simple.

HTH

--
$you = new YOU;
honk() if $you->love(perl)


Comment on Re: Scoped Variables in a Recursive Function.
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://34544]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2014-09-19 02:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (129 votes), past polls