I32 grows = PL_op->op_private & OPpTRANS_GROWS;
I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT;
I32 del = PL_op->op_private & OPpTRANS_DELETE;
- STRLEN len, rlen;
+ STRLEN len, rlen = 0;
short *tbl;
I32 ch;
SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
UV none = svp ? SvUV(*svp) : 0x7fffffff;
UV extra = none + 1;
- UV final;
+ UV final = 0;
UV uv;
I32 isutf8;
U8 hibit = 0;
S_do_trans_count_utf8(pTHX_ SV *sv)/* SPC - OK */
{
U8 *s;
- U8 *start, *send;
+ U8 *start = 0, *send;
I32 matches = 0;
STRLEN len;
SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
UV none = svp ? SvUV(*svp) : 0x7fffffff;
UV extra = none + 1;
- UV final;
+ UV final = 0;
bool havefinal = FALSE;
UV uv;
STRLEN len;
register I32 items = sp - mark;
register STRLEN len;
STRLEN delimlen;
- register char *delim = SvPV(del, delimlen);
STRLEN tmplen;
+ (void) SvPV(del, delimlen); /* stringify and get the delimlen */
+ /* SvCUR assumes it's SvPOK() and woe betide you if it's not. */
+
mark++;
len = (items > 0 ? (delimlen * (items - 1) ) : 0);
(void)SvUPGRADE(sv, SVt_PV);
++mark;
}
+ sv_setpv(sv, "");
+ if (PL_tainting && SvMAGICAL(sv))
+ SvTAINTED_off(sv);
+
if (items-- > 0) {
- sv_setpv(sv, "");
if (*mark)
sv_catsv(sv, *mark);
mark++;
}
- else
- sv_setpv(sv,"");
+
if (delimlen) {
for (; items > 0; items--,mark++) {
sv_catsv(sv,del);
char *rsave;
bool left_utf = DO_UTF8(left);
bool right_utf = DO_UTF8(right);
- I32 needlen;
+ I32 needlen = 0;
if (left_utf && !right_utf)
sv_utf8_upgrade(right);