LOP(OP_BIND,XTERM);
case KEY_binmode:
- UNI(OP_BINMODE);
+ LOP(OP_BINMODE,XTERM);
case KEY_bless:
LOP(OP_BLESS,XTERM);
register char *s = start; /* current position in buffer */
register char *d; /* destination in temp buffer */
register char *e; /* end of temp buffer */
- UV tryuv; /* used to see if it can be an UV */
NV value; /* number read, as a double */
SV *sv = Nullsv; /* place to put the converted number */
bool floatit; /* boolean: int or float? */
/* make an sv from the string */
sv = NEWSV(92,0);
-#if defined(USE_64_BIT_INT) && \
- (!defined(HAS_STRTOLL)|| !defined(HAS_STRTOULL)) || \
- !defined(USE_64_BIT_INT) && \
- (!defined(HAS_STRTOL) || !defined(HAS_STRTOUL))
+ /* unfortunately this monster needs to be on one line or
+ makedepend will be confused. */
+#if (defined(USE_64_BIT_INT) && (!defined(HAS_STRTOLL)|| !defined(HAS_STRTOULL))) || (!defined(USE_64_BIT_INT) && (!defined(HAS_STRTOL) || !defined(HAS_STRTOUL)))
/*
No working strto[u]l[l]. Since atoi() doesn't do range checks,
Note: if floatit is true, then we don't need to do the
conversion at all.
*/
- tryuv = U_V(value);
- if (!floatit && (NV)tryuv == value) {
- if (tryuv <= IV_MAX)
- sv_setiv(sv, (IV)tryuv);
+ {
+ UV tryuv = U_V(value);
+ if (!floatit && (NV)tryuv == value) {
+ if (tryuv <= IV_MAX)
+ sv_setiv(sv, (IV)tryuv);
+ else
+ sv_setuv(sv, tryuv);
+ }
else
- sv_setuv(sv, tryuv);
+ sv_setnv(sv, value);
}
- else
- sv_setnv(sv, value);
#else
/*
strtol/strtoll sets errno to ERANGE if the number is too big
if (floatit) {
char *tp;
errno = 0;
-#ifdef USE_LONG_DOUBLE
+/* For some reason VMS doesn't have strrold at the moment. Dunno why */
+#if defined(USE_LONG_DOUBLE) && (defined(HAS_STRTOLD) || !defined(VMS))
value = strtold(PL_tokenbuf,&tp);
#else
value = strtod(PL_tokenbuf,&tp);
sv, Nullsv, NULL);
break;
- /* if it starts with a v, it could be a version number */
+ /* if it starts with a v, it could be a v-string */
case 'v':
vstring:
{