http://www.perlmonks.org?node_id=627614

ribasushi has asked for the wisdom of the Perl Monks concerning the following question:

Hello honorable Monks, Today I uncovered a very subtle bug in one of my programs, and although I fixed it I have no idea what is actually going on. Here is an example program that demonstrates what happens:
#!/usr/bin/perl my $test = 'abc , def'; for my $sub qw/trim_start trim_end trim_start trim_end/ { $test =~ /([\s\w]+),([\s\w]+)/; $sub->($1, $2); } sub trim_start { while (@_) { my $string = shift @_; $string =~ s/\A\s+//ms; print "$string\n"; } } sub trim_end { while (@_) { my $string = shift @_; $string =~ s/\s+\z//ms; print "$string\n"; } }

What is the difference between the two regexes? Why does only trim_end() destroy $2? I solved my problem by doing:
my @args = @_; while (@args)...
but I still would like to know what causes this.

Thank you in advance.