in reply to Re^2: Possible bug with array pointer
in thread Possible bug with array pointer

Hello jockel,

A standard idiom (see Re: Containing 'use lib' statements in modules to their own namespace) for removing (“breaking”) the alias is to assign the aliased variable to a lexical variable inside the loop:

use strict; use warnings; my $arrayref = ['A','_B','C']; for my $str (@$arrayref) { print "BEFORE: str = $str\n"; } for (@$arrayref) { my $str = $_; $str =~ s/^_//; print "INNER: str = $str\n"; } for my $str (@$arrayref) { print "AFTER: str = $str\n"; }

Output:

13:30 >perl 1738_SoPW.pl BEFORE: str = A BEFORE: str = _B BEFORE: str = C INNER: str = A INNER: str = B INNER: str = C AFTER: str = A AFTER: str = _B AFTER: str = C 13:30 >

BTW, an underscore character has no special meaning in a regex, so it doesn’t need to be escaped. Also, in the absence of an /m modifier, ^ can only ever match once, at the beginning of the string, so the /g modifier is redundant.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^4: Possible bug with array pointer
by jockel (Beadle) on Jan 11, 2017 at 14:36 UTC

    Thank you for your tips =)

    I solved it by copying the referenced array to a "normal array" before the foreach. TMTOWTDI =)

    I usually escape more than needed. Better safe than sorry. About the redundancy with ^ and /g, I totally agree!