Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^9: A short whishlist of Perl5 improvements leaping to Perl7

by eyepopslikeamosquito (Archbishop)
on Nov 28, 2020 at 20:33 UTC ( [id://11124334]=note: print w/replies, xml ) Need Help??


in reply to Re^8: A short whishlist of Perl5 improvements leaping to Perl7
in thread A short whishlist of Perl5 improvements leaping to Perl7

I don't understand why you didn't go the easy way of defining my %rtoa either on file or function scope.
Though that was easier, I am pedantic and just couldn't bring myself to do it:
  1. I didn't want %rtoa at file scope because other functions in the same file have no business knowing about its existence - it is a roman_to_dec() implementation detail after all and I should be able to later change the implementation of this function with complete confidence that doing so cannot possibly break other functions in the same file ... which is why I originally created the bare block, solely to hide %rtoa from other functions in the same file.
  2. I didn't want my %rtoa at function scope because it is gratuitously inefficient to (unnecessarily) initialise %rtoa each and every time the function is called (it is a constant after all). More importantly, expressing that %rtoa is const and is used only by roman_to_dec aids code clarity (BTW, I miss C++'s const keyword when coding in Perl).
BTW, it seems to me that state variables were added to perl expressly to solve the above two concerns.

Update: Re the rationale for introducing state variables, found a quote from Larry himself in Re: About "state" variables in Perl 5.10:

However, that difference is not why we introduced state variables. The big win is the psychological one of not having to look outside of the sub to find the definition of $x. (That, and we wanted it as a primitive in Perl 6 so that people could write stateful macro constructs without forcing the user to define the state variable externally; in fact, we also use it ourselves in order to implement the stateful flipflop operator without having to build the flipflop in as a primitive, as it is in Perl 5.)

Replies are listed 'Best First'.
Re^10: A short whishlist of Perl5 improvements leaping to Perl7
by LanX (Saint) on Nov 28, 2020 at 23:36 UTC
    yeah, I understand your aspiration for 100% solutions.

    But it's a Rosetta Stone fire-and-forget demo script and I doubt we'd see any other function added.

    Or do you expect a need for sumerian_to_maya() soon? ;-)

    > (BTW, I miss C++'s const keyword when coding in Perl).

    why not ...

    use Readonly; Readonly my %has => (key => value, key => value, ...);

    If that's too ugly, we could try to define an attribute to do so.

    my %has :ro = (key => value, key => value, ...);

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

      But it's a Rosetta Stone fire-and-forget demo script and I doubt we'd see any other function added.
      True, but I write Rosetta code snippets to give me insights into real world production code ... so though the examples may be small, I pretend they're serious real-world production code, so as to gain clearer insights into language features.

      Thanks for the tip about Readonly ... which I confess I've never used. Found this good-looking link CPAN modules for defining constants by Neil Bowers (neilb) ... which just made me pine for the simplicity of C++ built-in const keyword. :)

Log In?
Username:
Password:

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

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

    No recent polls found