Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Defining, Testing and Documenting Perl?

by Tux (Abbot)
on Dec 23, 2019 at 20:37 UTC ( #11110560=note: print w/replies, xml ) Need Help??


in reply to Defining, Testing and Documenting Perl?

/me mumbles .oO( ties and overloads )


Enjoy, Have FUN! H.Merijn
  • Comment on Re: Defining, Testing and Documenting Perl?

Replies are listed 'Best First'.
Re^2: Defining, Testing and Documenting Perl?
by tobyink (Canon) on Dec 23, 2019 at 22:00 UTC

    Fun fact: the Moose "Bool" datatype will accept overloaded objects, but only if they stringify to "", "0", "1" or undef. It doesn't care what they boolify to!

    Other fun fact: the Mouse "Bool" datatype will accept overloaded objects, but only if they boolify to a false value.

     

    This is why Types::Standard 1.004 abandoned trying to be compatible with Moose and Mouse's definitions of "Bool" and instead just accepts "", "0", "1" and undef, but offers a coercion from other values.

Re^2: Defining, Testing and Documenting Perl?
by LanX (Archbishop) on Dec 24, 2019 at 00:41 UTC
    > mumbles .oO( ties and overloads )

    what's your point?

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      I believe a tied hash can override how it behaves in scalar context, so that an empty hash can return true and a non-empty hash can return false.

      An overloaded object can do various tricky things with regards to how it behaves as a boolean. For example, it could die.

      if ($x || $y) { say "Something was true. What was it?"; say '$x' if $x; say '$y' if $y; } else { say "Neither was true."; }

      It is possible for this to print "Something was true?" but not tell you what was true. This is because $x or $y could be an overloaded object returning true or false at random each time they are checked.

        yeah I already mentioned overload and I have to admit I didn't expect it but Tie::Hash is indeed mentioning a SCALAR method.

        But those edge cases were not my point, because these are backdoors to fake behavior.

        They should nevertheless be mentioned in a footnote and tested properly in an extra script.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11110560]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (7)
As of 2020-05-27 13:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    If programming languages were movie genres, Perl would be:















    Results (155 votes). Check out past polls.

    Notices?