I recently got bit by C<return;> in Perl 5, which leads me to wonder
about Perl 6. C<return>, when called without an expression, tries to
DWIM, returning an empty list in list context and undef in scalar
context, which is generally a good thing. But I came across this code
at work this week:
use CGI qw(:standard);
my $foo = Bar->new(
name => "Baz",
value => param('baz'),
something => 'else'
);
See the problem? 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? 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;
I want my cake. And I want to eat it to, dang it!
--
matt