Perl is more generous and gives warnings if they are enabled. This will give a warning:#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *digits="0123456789"; char x[] = "2abc"; int result = atoi(x); printf ("case a) string %s is %d as decimal\n",x,result); if (strlen(x) == 0 || (strspn(x,digits) != strlen(x))) printf ("case b) %s is NOT a simple positive integer!\n" " there are either no digits or non-digits\n", x); char y[] = ""; int result_y = atoi(y); printf ("case c) a null string results in %d\n",result_y); return 0; } /* prints: case a) string 2abc is 2 as decimal case b) 2abc is NOT a simple positive integer! there are either no digits or non-digits case c) a null string results in 0 */
You can check yourself if \D exists in string or if null string. Otherwise Perl will do the "best that it can".#!/usr/bin/perl -w use strict; my $a = "23B"; $a +=0; print $a;
Also of note is that in Perl, everything is a string a string that looks like a number is still a string until used in a numeric
context. Consider this:
This is a "trick" that I sometimes use to delete leading zeroes.my $x = "00012"; print "$x\n"; $x+=0; print "$x\n"; ##prints #00012 #12
In reply to Re^2: Numification of strings
by Marshall
in thread Numification of strings
by LanX
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |