Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: Scoped Variables in a Recursive Function.

by japhy (Canon)
on Sep 28, 2000 at 16:46 UTC ( #34369=note: print w/ replies, xml ) Need Help??


in reply to Scoped Variables in a Recursive Function.

You should not define a function inside a function. It does not behave as you'd expect. Instead, change your scoping slightly:

{ my @array; sub Merge { @array = @_; MergeSort(0, $#array); } sub MergeSort { # can see @array here... } }


$_="goto+F.print+chop;\n=yhpaj";F1:eval


Comment on Re: Scoped Variables in a Recursive Function.
Download Code
RE: Re: Scoped Variables in a Recursive Function.
by Adam (Vicar) on Sep 28, 2000 at 19:46 UTC
    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; }
      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.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (9)
As of 2014-10-20 11:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (75 votes), past polls