Keep It Simple, Stupid PerlMonks

### RE: Re: Scoped Variables in a Recursive Function.

 on Sep 28, 2000 at 19:46 UTC ( #34412=note: print w/ replies, xml ) Need Help??

That will work, but as tilly pointed out, the problem is with the MergeSort code being named. This aught to work with the fewest changes to your code:

```sub Merge(@) {
my @array = @_;

local \$MergeSort = sub { ### Anonymous code ref. ###
my \$first = shift;
my \$last = shift;
if (\$last>\$first) {
my \$mid = int((\$last+\$first)/2);
\$MergeSort->(\$first, \$mid);
\$MergeSort->(\$mid+1, \$last);
my @b;

@b = ( @array[\$first..\$mid], @array[reverse(\$mid+1..\$last)] );
my (\$i, \$j, \$k) = (0, \$last-\$first, \$first);
for (; \$k<=\$last; \$k++) {
\$array[\$k] = (\$b[\$i]<\$b[\$j]) ? \$b[\$i++] : \$b[\$j--];
}
}
}

\$MergeSort->(0, \$#array);
return @array;

}

Comment on RE: Re: Scoped Variables in a Recursive Function.
RE: RE: Re: Scoped Variables in a Recursive Function.
by japhy (Canon) on Sep 28, 2000 at 21:12 UTC
That ought to work, but it's silly, since it creates a code reference EVERY TIME you run Merge(). There's no reason to use a code reference. Define Merge() and MergeSort() in the same block, and have @array be shared between them.

\$_="goto+F.print+chop;\n=yhpaj";F1:eval
Yeah, I was thinking about that... I think you are right.

Create A New User
Node Status?
node history
Node Type: note [id://34412]
help
Chatterbox?
and the web crawler heard nothing...

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