Bryan asked:
> What about filetests that already return something meaningful? I'll
> assume that they still behave the same. (And thus, shouldn't be
> chained. Unless you're doing something weird.)
Yep.
> It's also mentioned that they don't short-circuit, so what do
> post-failure tests test against? (I'll assume 'undef', which a test
> will also return 'undef' against.)
Effectively, yes. Actually it's likely to be (the equivalent of) a stat
buffer with its 'is false' property set, so that each test can
short-circuit internally and propagate the failure.
> ** Miscellaneous
>
> Why 'operator:+' instead of 'operator::+'? (Other than the
> potential verbosity required to declare operators within a
> particular package.) I would think it more intuitive to think of
> 'operator' as a provided package (within every package).
>
> Hmm, lexicals.
Yep. Overloaded operators will be inherently lexical (to keep them from
running amok), so they can't be in packages.
> ** Unary _
>
> Space or no space?
Space
> sub _mysub {}
> $a = _mysub;
>
> Which behavior is changing?
No behaviour is changing. Underscore in identifiers has precedence over
underscore as an operator.
> ** Binary //
>
> Was a test for definedness *and* truthfulness considered?
Err... the || operator *is* a test for that.
> Personally, I test for both, particularly within the context of
> defaulting. Of course, you could still write:
>
> $a = ($a // $b) || $b;
No need for the parens, there. // and || are of the same precedence and
left-associative.
Actually, no need for the // either. The assignment has exactly the same
effect as:
$a = $a || $b;
Damian