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 (Scribe) 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'