1
2
3
my $count = 3;
my $str = "blublublublublu";
$str =~ s/(lu)/--$count == 0 ? "LA":$1/ge;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
my $str = "blublublublublu"; my $such='lu'; my $repl='LA'; my $count = 3; my $pos=0; while($count and $pos >= 0) { $pos=index($str,$such,$pos); $count--; } if($pos>0){ substr($str,$pos,length($such),$repl); }
$s =~ s/(sneak)/replace_third($1)/eg;
1
2
3
4
5
6
my $s =~ s/(sneak)/replace_third($1)/eg;
sub replace_third {
my $match = shift;
my $i;
if (++$i == 3) {return "replacement string"} else {return "$match"}
}
1
2
3
4
5
6
7
my $i;
my $s =~ s/(sneak)/replace_third($1, ++$i)/eg;
sub replace_third {
my ($match, $i) = @_;
if ($i == 3) {return "replacement string"} else {return "$match"}
}
2013-03-13T10:14:02 Student87Kann man ++$i an eine sub übergeben? Weil wenn ich erst in der sub inkrementiere, wird ja nicht ausserhalb der sub inkrementiert ... ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# erster Test
$ perl -wle '
my $i=0;
sub foo { my $cnt = shift; print "i innen: $cnt\n"; }
foo( ++$i );
'
i innen: 1
# zweiter Test
$ perl -wle '
my $i=0;
sub foo { print "i innen: ", ++$i, "\n"; }
foo();
print "i aussen: $i\n";
'
i innen: 1
i aussen: 1
1 2 3 4 5 6 7 8 9 10
sub Counter { my $i = 0; return sub { print $i++."\n"; } } my $counter = Counter; $counter->(); $counter->();
1 2 3 4 5 6 7 8 9 10 11 12
use feature 'state'; sub foo { state $i++; $i=shift()-1 if @_; return $i; } foo 1; print foo."\n" for 0..9; foo 0; print foo."\n" for 1..5;