Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

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

by LanX (Saint)
on Nov 28, 2020 at 12:12 UTC ( [id://11124318]=note: print w/replies, xml ) Need Help??


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

> > I'm not sure why rtoa has to be in the closure.

I should have been clearer... I don't understand why you didn't go the easy way of defining my %rtoa either on file or function scope. No problem translating this to python.

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

Replies are listed 'Best First'.
Re^9: A short whishlist of Perl5 improvements leaping to Perl7
by eyepopslikeamosquito (Archbishop) on Nov 28, 2020 at 20:33 UTC

    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.)

      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://11124318]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (4)
As of 2024-03-29 10:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found