use warnings; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'EOC'; SV* wotisit(SV * arg) { if(SvPOK(arg)) return newSVpv("string", 0); if(SvIOK(arg) || SvNOK(arg) || SvUOK(arg)) return newSVpv("number", 0); return newSVpv("something else", 0); } EOC use Math::BigInt; # for testing my $o = Math::BigInt->new(0); for('1', '1.1', 1, 1.1, $o) { print wotisit($_), "\n"; }