Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re^2: storage of numbers

by vsespb (Chaplain)
on Oct 16, 2013 at 17:57 UTC ( #1058521=note: print w/replies, xml ) Need Help??

in reply to Re: storage of numbers
in thread storage of numbers

Do you know that
perl -MScalar::Util=looks_like_number -e 'print looks_like_number "Inf +"'
prints true?

Replies are listed 'Best First'.
Re^3: storage of numbers
by ww (Archbishop) on Oct 16, 2013 at 19:56 UTC

    That's not what happens under Win7, perl 5.16, and the latest AS 5.16-repository version of Scalar::Util (with quotes adjusted for MS pleasure):

    C:\>perl -MScalar::Util=looks_like_number -e "print looks_like_number +'Inf'" 20

    Oh. OK, if you say so. But why did the output ne 'True' (unless 'Inf/INF/inf' is treated as NAN?
    Just then, though, a lightbulb flashed on -- AhHA,   /me said to myself!     RTFM!

    looks_like_number EXPR Returns true if perl thinks EXPR is a number. See "looks_like_number" +in perlapi.

    Unfortunately, the link, <a href="/perldoc?perlapi#looks_like_number" class="podlinkpod">&#34;looks_like_number&#34; in perlapi</a> (to which 'See' directs us) is broken.

    So forging blindly onward with what seemed, OTTOMH, some semi-plausible alternatives:

    C:\>perl -e "use Scalar::Util(looks_like_number); print looks_like_num +ber 'Inf'" 20 C:\>perl -e "use Scalar::Util(looks_like_number); print looks_like_num +ber 'foo'" 0 C:\>perl -e "use Scalar::Util(looks_like_number); print looks_like_num +ber 'inf'" 20 C:\>perl -e "use Scalar::Util(looks_like_number); print looks_like_num +ber '7'" 1 C:\>perl -e "use Scalar::Util(looks_like_number); print looks_like_num +ber '7874321907'" 2 C:\>perl -e "use Scalar::Util(looks_like_number); print looks_like_num +ber(7874321907)" 8704

    It all leaves me deep in 'WTF' territory and slipping into the quicksand.

    So prithee, Wiser heads: Prevail! and halp, hal blubh blub o o ....

    Update: added first 1.5 sentences after the first blockquoted code.

      When I told "prints true? " I meant something which is TRUE. Yes, it was 20. Sorry for confusion.
      Well, anyway, the point was you don't always really want accept "Inf" as number. Sometimes you just want "normal" numbers.
Re^3: storage of numbers
by davido (Archbishop) on Oct 16, 2013 at 21:23 UTC

    Do you know that...

    Yes, it's documented in perlapi. I didn't assume that would be a concern for the OP.

    The old pure-Perl version of Scalar::Util has a pure-Perl version of looks_like_number, which includes the following code:

    return 1 if ( $] >= 5.008 and /^(Inf(inity)?|NaN)$/i ) or ( $] >= 5.006001 and /^Inf$/i );

    So if we wanted to eliminate that behavior, we could either copy/paste and modify the entire pure-Perl version from an old version of Scalar::Util (but it has issues with '0 but true'), or use the modern version of Scalar::Util::looks_like_number like this:

    sub looks_like_finite_number { my $candidate = shift; return 0 if ! looks_like_number( $candidate ); return 0 if ( $] >= 5.008 and $candidate =~ /^(Inf(inity)?|NaN)$/i) or ( $] >= 5.006001 and $candidate =~ /^Inf$/i ); return 1; }

    Or, in perlfaq4 there is a series of regexes given for determining if one is looking at a number under the section, "How do I determine whether a scalar is a number/whole/integer/float? It's not pretty, and that FAQ answer has even changed over the years; it used to use a bunch of "if" statements. Now it uses given/when. *sigh*


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1058521]
[stevieb]: ...has honed in my skills of recognizing sound
[stevieb]: All of the early members are coming out of the woodwork today :) Hey, planetscape
[Corion]: This cover version had so much promise but the singing is underwhelming :-/
[stevieb]: erix Thanks! I dislike remakes of songs usually, but my favourite remix of guitar/weeps is Jeff Healey. I'll take a listen to yours
[planetscape]: hi stevieb!
[stonecolddevin]: also hi Corion
[Corion]: stevieb: Yeah, but I don't follow guitar players enough... I never got Prince and I don't think I could recognize his play style. I can recognize Santana and Nile Rodgers, but that's about it, and not really deep knowledge I think ;)
[stevieb]: Jeff Healey cut of My guitar gently weeps
[stonecolddevin]: you don't recognize Prince. Prince tells you it's him.
[erix]: Alvin Lee (Ten Years After) played a jazzguitar ("Big Red"), a good warm sound

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2017-06-22 21:30 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (531 votes). Check out past polls.