Matt Diephouse writes:
>     use CGI qw(:standard);
>     
>     my $foo = Bar->new(
>         name => "Baz",
>         value => param('baz'),
>         something => 'else'
>     );
> 
> See the problem? 

Yikes, yeah, that seems so innocent.

> C<param> uses C<return;>. In this example, it's called in list
> context. So if there is no 'baz' parameter, the list will get shifted
> like so:
> 
>     my $foo = Bar->new(
>         name => "Baz",
>         value => "something",
>         else => undef
>     );
> 
> I can't imagine how much trouble this would have caused me if I didn't
> know about the C<return;> special case. Any chance this will work
> differently in Perl 6? 

Yep.  First of all, param('baz') would be called in scalar context,
since it's on the right side of a pair constructor, as you're about to
say.

> I'd be tempted to suggest that C<<=>>>, in its new role as pair
> constructor, put things in scalar context, but lately I've started to
> write join's like so:
> 
>     my $string = join "," => @array;

No such luck.  I use => in all sorts of places where , usually goes.
But I'm going to have to change my ways for Perl 6.  All in all, I think
the pair object gives us too many wins over the fat comma.

On the other hand, you can now write your join in any of the following
ways:

    join ",", @array;
    @array.join(",");
    join @array: ",";
    &*join(q{,}<[EMAIL PROTECTED]); 

:-)

Luke

Reply via email to