Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^2: Bug in Class::Struct?

by freonpsandoz (Beadle)
on Apr 26, 2020 at 22:56 UTC ( [id://11116097]=note: print w/replies, xml ) Need Help??


in reply to Re: Bug in Class::Struct?
in thread Bug in Class::Struct?

Yes, in absence of any documentation to the contrary in https://perldoc.perl.org/perlop.html#Comma-Operator I would expect the operator to force scalar context. If it's a "back-compat thing," shouldn't it be highlighted in the documentation? Also, is there any reason the constructor can't do it if the operator doesn't? (I have to admit that I'm not even sure what the documentation for m// means when it says the search returns true or false, since Perl doesn't have explicit boolean values. Is assigning the return value to a scalar or passing it to a function not well-defined?) Thanks.

Replies are listed 'Best First'.
Re^3: Bug in Class::Struct?
by haukex (Archbishop) on Apr 27, 2020 at 06:33 UTC
    in absence of any documentation to the contrary in https://perldoc.perl.org/perlop.html#Comma-Operator I would expect the operator to force scalar context.

    It's documented in List value constructors:

    LISTs do automatic interpolation of sublists. That is, when a LIST is evaluated, each element of the list is evaluated in list context, and the resulting list value is interpolated into LIST just as if each individual element were a member of LIST.

    A cross-reference between the two docs probably wouldn't hurt.

    You might be interested in PerlX::Maybe.

    I have to admit that I'm not even sure what the documentation for m// means when it says the search returns true or false, since Perl doesn't have explicit boolean values.

    See Truth and Falsehood (there used to be a section in the Perl docs).

      > there used to be a section

      It was moved to perldata, and there might be a link to it from the old location.

      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
Re^3: Bug in Class::Struct?
by NERDVANA (Deacon) on Apr 27, 2020 at 03:31 UTC
    A sub without a prototype (such as this constructor) always provides list context. Even if it had a prototype, prototypes are ignored when calling a sub as methods of a package or object. But even if they weren’t ignored, the prototype would limit you to a very specific list of arguments, and not the free-form key/value pairs that are popular for constructing objects. In general, assume list context for function arguments.

    Perl’s “boolean” is exactly what you get from the result of the not operator, which is 1 for true, or a dualvar for false that evaluates as both empty string and as 0 depending how it gets used. I think its fair to refer to these as True and False in the context of perl. (and perhaps stockholm syndrome, but after using this for some years it starts to seem really unnecessary for other languages to have dedicated boolean constants, heh)

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2024-04-18 22:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found