http://qs321.pair.com?node_id=285371


in reply to array confusion

Not sure what you might've been expecting? I threw lots of prints at your code:
$pattern = '[aeiou]'; ( $s1, $s2, $s3, $s4 ) = qw( name nerd noodle froodle ); printf "was: '%s'\n", join("' '",$s1,$s2,$s3,$s4); foreach my $item ($s1,$s2,$s3,$s4,) { $item =~ s/$pattern/ /g; } printf "now: '%s'\n", join("' '",$s1,$s2,$s3,$s4); ( $s1, $s2, $s3, $s4 ) = qw( name nerd noodle froodle ); @a = ( $s1, $s2, $s3, $s4 ); print "\n"; printf "was: '%s'\n", join("' '",$s1,$s2,$s3,$s4); printf "was: '%s'\n", join("' '",@a); foreach my $item (@a) { $item =~ s/$pattern/ /g; } printf "now: '%s'\n", join("' '",$s1,$s2,$s3,$s4); printf "now: '%s'\n", join("' '",@a);
and got
  was:  'name'   'nerd'   'noodle'   'froodle'
  now:  'n m '   'n rd'   'n  dl '   'fr  dl '

  was:  'name'   'nerd'   'noodle'   'froodle'
  was:  'name'   'nerd'   'noodle'   'froodle'
  now:  'name'   'nerd'   'noodle'   'froodle'
  now:  'n m '   'n rd'   'n  dl '   'fr  dl '
When you did
my @look_for = ($name,$nerd,$noodle,$froodle);
you copied the _values_ in each variable into the array. You then looped through the array elements changing their values through the magic of foreach aliasing. But that doesn't change the variables you copied from.

Replies are listed 'Best First'.
Re: Re: array confusion
by Anonymous Monk on Aug 21, 2003 at 06:43 UTC
    Ah, a light begins to flicker and become brighter. This also explains BUU's contribution, which I didn't get the first time round.

    Thanks one and all for your help

    Phil