nested subs

2005-06-16 Thread Piers Cawley
So, I was about to write the following test for Pugs:

  sub factorial (Int $n) {
my sub factn (Int $acc, $i) {
  return $acc if $i  $n;
  factn( $acc * $i, $i+1);
}
factn(1, 1);
  }

When I thought to check the apocalypses and exegeses and, what do you know, I
couldn't find any evidence that nested named functions like this were legal. 

So, are they legal?

And yes, I know there are other ways of doing this, but I like the lack of
sigils on the function when you do it this way.


Re: nested subs

2005-06-16 Thread Luke Palmer
On 6/16/05, Piers Cawley [EMAIL PROTECTED] wrote:
 So, I was about to write the following test for Pugs:
 
   sub factorial (Int $n) {
 my sub factn (Int $acc, $i) {
   return $acc if $i  $n;
   factn( $acc * $i, $i+1);
 }
 factn(1, 1);
   }
 
 When I thought to check the apocalypses and exegeses and, what do you know, I
 couldn't find any evidence that nested named functions like this were legal.
 
 So, are they legal?

Yep.  And they work just as if you had used an anonymous sub there--it
closes over lexicals and everything.

Luke


Re: nested subs

2005-06-16 Thread Piers Cawley
Luke Palmer [EMAIL PROTECTED] writes:

 On 6/16/05, Piers Cawley [EMAIL PROTECTED] wrote:
 So, I was about to write the following test for Pugs:
 
   sub factorial (Int $n) {
 my sub factn (Int $acc, $i) {
   return $acc if $i  $n;
   factn( $acc * $i, $i+1);
 }
 factn(1, 1);
   }
 
 When I thought to check the apocalypses and exegeses and, what do you know, I
 couldn't find any evidence that nested named functions like this were legal.
 
 So, are they legal?

 Yep.  And they work just as if you had used an anonymous sub there--it
 closes over lexicals and everything.

I should bloody well hope so too.