develooper Front page | perl.perl5.porters | Postings from September 2009

when ( foo() ) { ... }

Thread Next
Yuval Kogman
September 23, 2009 15:53
when ( foo() ) { ... }
Message ID:
op.c's looks_like_bool has a comment:

    /* Does this look like a boolean operation? For these purposes
       a boolean operation is:
         - a subroutine call [*]
       [*] possibly surprising

That's quite an understatement. It guess makes sense if the subroutine
is invoking on the topic (and could make sense for subs with the
special $_ prototype where that's implicit), but other than that I
honestly can't think of a case where it makes more sense.

The downside is that it makes using subroutines that return objects
which overload ~~ impossible, which would have been very useful e.g.
with Moose's type constraints:

    use MooseX::Types qw(Str HashRef);

    given ( $thing ) {
        when ( HashRef ) { ... }
        when ( Str ) { ... }
        default { die "dunno what $_ is" }

and similar constructs.

In this case the exports return the type constraint object whose ~~
would be overloaded to apply the type constraint check to the

Is this prioritization of boolean returning subroutines really
intentional? I don't see why someone would topicalize if they are
going to ignore the value, so i'm really confused...

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About