Maybe use looks_like_number(sv) prior to calling sv_2nv ...
#!/usr/bin/perl use Inline C => <<'END_C'; void num_test(SV* sv) { I32 is_num = looks_like_number(sv); printf("'%s' looks like a number: %s (SvNV(): %g)\n", SvPV_nolen(sv), is_num ? "yes":"no", SvNV(sv) ); } END_C num_test('aa'); num_test('123'); num_test('123aa'); num_test('aa123'); num_test('1.23'); __END__ 'aa' looks like a number: no (SvNV(): 0) '123' looks like a number: yes (SvNV(): 123) '123aa' looks like a number: no (SvNV(): 123) 'aa123' looks like a number: no (SvNV(): 0) '1.23' looks like a number: yes (SvNV(): 1.23)
Update: added SvNV() results for comparison.
In reply to Re^5: Why does sv_2nv on non-number look like an NV
by almut
in thread Why does sv_2nv on non-number look like an NV
by mje
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |