http://www.perlmonks.org?node_id=995591


in reply to Data::Types or grok_number

use 5.010; use Scalar::Util qw(looks_like_number); sub is_int (_) { my $i = shift; looks_like_number($i) and int($i)==$i; } say for grep { is_int } qw( -6 5.2 5.0 3e4 0Hello );

Note that this classes 5.0 as an integer, which is correct from a maths point of view, but not necessarily from a comp sci one.

perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Replies are listed 'Best First'.
Re^2: Data::Types or grok_number
by tqisjim (Beadle) on Sep 25, 2012 at 17:57 UTC

    I was thinking of something along the lines of the following:

    print TQIS::Primitive::typeis("1") ; > string print TQIS::Primitive::typeis(1) ; > integer
    Here is the code:
    #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" SV* typeis ( SV* what ) ; SV* typeis ( SV* what ) { if ( SvIOK( what ) ) return newSVpvs( "integer" ) ; else if ( SvNOK( what ) ) return newSVpvs( "double" ) ; else if ( SvPOK( what ) ) return newSVpvs( "string" ) ; return newSVpvs( "unknown" ) ; } MODULE = TQIS::Primitive PACKAGE = TQIS::Primitive PROTOTYPES: ENABLE SV* typeis( what ) SV* what