#!/usr/bin/perl -w use strict; my $version = '0.8.34.0'; # This works as expected $version =~ /(\d+\.\d+\.)(\d+)(\.\d+)/; $version = $1 . ($2 + 1) . $3; print "$version\n"; # but this won't compile, --- why? #$version =~ s/(\d+\.\d+\.)(\d+)(\.\d+)/{$1}$2+1{$3}/e; print $version; #### #!/usr/bin/perl -w use strict; my $version = '0.8.34.0'; $version =~ /(\d+\.\d+\.)(\d+)(\.\d+)/; $version = $1 . ($2 + 1) . $3; print "$version\n"; $version =~ s/(\d+\.\d+\.)(\d+)(\.\d+)/$1.($2+1).$3/e; print "$version\n"; $version = do { my $v = [ split /\./, $version ]; $v->[2]++; join '.', @$v }; print "$version\n"; $version =~ s/(\d+)(?=\.\d+\z)/$1 + 1/e; print "$version\n";