das ist eine kleine falle =)
bei jedem weiteren erfolgreichen match mit captures wird $1 neu gesetzt. bevor du den parameter aus @_ herausholst, ist es ein alias auf $1.
ich vermute, das modul macht da irgendeine regex in der sub, bevor dein code aufgerufen wird.
dasselbe kannst du aber auch mit einer beliebigen variable $x nachstellen, die du in der sub am anfang veränderst, wenn diese in der sub gültig ist.
beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
perl -wE'
"test" =~ m/(e)/; # $1 = e
foo($1);
sub foo {
"bla" =~ m/(a)/; $1 = a
my ($param) = @_;
say $param;
}
my $x = 23;
bar($x);
sub bar {
$x++;
my ($param) = @_;
say $param;
}
'
a
24
mit der übergabe von "$1" wird ein neuer string erzeugt, und der hat keinen bezug mehr zu $1.
Last edited: 2013-09-11 18:40:39 +0200 (CEST)