HellyerP wrote:

> This week I was fortunate enough to hear Damian speak twice, once on 
> everything and once on Perl6.  Damian, it was tremendous of you to come 
> and speak to us in London - thank-you very much.

It was my pleasure.


> If he's coming to a city near you, book 
> your seats now.  The Munich YAPC is next, I think.

Not quite. Belfast next week. Zurich the week after. Then Munich.


> [1] subs with prebound arguments: will they behave as though their 
> parameter list were declared exactly like their ancestor but with the 
> bound parameter bodily removed?

Yes.


> [2] There was a rumour that we may be able to overload subroutines.  How 
> will this interact with prebinding?
> 
>     &foo = sub( ; $alpha, @beta ) { print "array" }
>     &foo = sub( ; $alpha, %beta ) { print "hash" }
>    
>     foo( $x, @y );                       # array
>     foo( $x, %z );                       # hash
>     foo( $x );                           # ambiguity error
>     foo( @y );                           # array, $alpha is undef
> 
>     &bar = &foo.assuming( beta => [ 1, 2 ] );
>     bar();                               # array, $alpha is undef

Yes.


>     # will this create overloaded versions of baz?
>     &baz = &foo.assuming( alpha => 0 );

I hope so. :-)


> [3] How is more than one argument prebound?
> 
>     &foo = sub ( $alpha, $beta, $gamma ) { ... }
> 
>     # chaining should work.
>     &bar = &foo.assuming( alpha => 1 ).assuming( beta => 2 );
> 
>     # or ought that to be one assumption with a HASH?
>     &bar = &foo.assuming( { alpha => 1, beta => 2 } );
> 
>     # or even just a list of PAIRs?
>     &bar = &foo.assuming( alpha => 1, beta => 2 );

The third version is best. The first version also works.
The second probably doesn't work.


> [4] Fancy fors
> 
>     If we want to traverse two arrays, we can do this
> 
>     for @alpha, @beta { ... }
> 
>     and it will exhaust alpha before we get the first element of beta.  

Yes.


> The only undefs seen in the block are those that exist in the arrays.  
> Alternately, <groan> this
> 
>     for @alpha ; @beta { ... }
> 
>     will alternate between elements of @alpha, binding each to the magic 
> topic $_ in turn.  If the arrays are not of equal length, then the 
> shorter one will be 'padded' with undef until the longer one is 
> exhausted.  So if I wanted the alternation without being affected by the 
> padding, I would write something like this:
> 
>     for @alpha ; @beta {
>         next unless defined;
>         ...
>     }

Probably.

But there might well be a special dispensation that two (or more)
streams feeding one variable only alternate between those streams that
are not exhausted.

Damian




Reply via email to