Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.
  • First off, thanks for the nice review, it is good to get feedback from new Moose users. The #moose echo chamber on IRC is obviously not so helpful in this regard.

    The default of ''is => "ro"' is badly chosen ...

    Actually the default is to not create any accessors at all. While it might seem useless, it is a perfectly valid use case, take this example for instance:

    has 'some_flag' => (
        predicate => 'is_some_flag_set'

    This will create a predicate method for checking if the flag is

    • It differs from Perl in that it wont accept an arbitrary value and treat it as true.

      That was what I was referring to. Maybe if it's advertised as these-are-the-Perl-types kind of type constraint it should actually conform to the Perl true/false idea, and if you want to stricten it up to only support 1/0/undef you use a different one (Bool vs Boolean) ?

      Anyway, it surprised me when using it, that's all.


      • I think perhaps you are mistaking a "value" for the "value of an expression". When Perl sees

        if (@foo) { ... }

        it evaluates @foo as an expression, and in that context it returns true. If I were to invent a "boolean" built in similar to the "scalar" built in, which forced "boolean context", then the above code would desugar into

        if (boolean(@foo)) { ... }

        Just as

        my $foo = @foo;

        desugars into

        my $foo = scalar @foo;

        Now in the context of Moose, when you assign a value to an accessor it does not impose the "boolean context" on it, so it only sees a value, and therefore does not pass the type constraint.

        - Stevan