Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: way of declare an integer variable instead use /^\d+$/

by Anonymous Monk
on May 25, 2024 at 06:57 UTC ( [id://11159656]=note: print w/replies, xml ) Need Help??


in reply to way of declare an integer variable instead use /^\d+$/

/^\d+$/ is the shortest you'll get. except maybe int, but that's different.

Replies are listed 'Best First'.
Re^2: way of declare an integer variable instead use /^\d+$/
by vincentaxhe (Beadle) on May 25, 2024 at 09:28 UTC
    someone might disagree, it's no good for perl.
      Perl is, contrary to C, a dynamically typed language.

      A static typing, i.e. at compilation time, is nearly impossible.

      Otherwise you'd need to type everything, including the result of functions. Even then....¹

      A check at runtime is costly, that's why dynamically typed languages are slower, but easier to code.

      As I already said, you could tie the variable with a self-made STORE (This, Value) function which does your checks on Value before storing it.

      Attribute::Handlers has an example for Syntactic sugar to "hide" the tie-ing procedure behind an attribute.

      I'm not aware of any CPAN modules already providing that, especially because there are certainly different models how to react on wrong types ( die , warn , transform, combine)

      I already gave you all the links, you'd need to do it yourself for your own needs.

      For instance 1E0 is a whole number in float notation, opinions will differ.

      I'm saying all of this for completeness, because it's a total overkill for your problem.

      There is no magic wand which can do the heavy lifting for you...

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

      ¹) Perl, like other dynamic languages, does a lot of DWIM typecasting of variables. This doesn't translate well if you want to keep it fast.

        As I already said, you could tie the variable with a self-made STORE ( +This, Value) function which does your checks on Value before storing +it.

        allow me to clarify the above, in reference to what you said before that:

        You could use Tie::Scalar to make sure that a var $x will always stay +an integer, by declaring STORE. But that will slow down every operati +on on $x.
        , just use the slow Tie::Scalar to only do the validation, then store the validated integer into a "normal" variable.

        Tie::Scalar whatever it can do,it's overkill to declare an integer, I do not know how to implement it, I seldom use class in my scripts.

        It may be either-or, I can not have both, regex is a much general define method, I'm learning to appreciate it, since 'every perl script use regex'

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (6)
As of 2024-09-17 08:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The PerlMonks site front end has:





    Results (22 votes). Check out past polls.

    Notices?
    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.