Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

RegEx bump version number

by ady (Deacon)
on Apr 25, 2007 at 17:28 UTC ( #612060=perlquestion: print w/replies, xml ) Need Help??

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

I want a rexex s///e to bump up the build number, eg. from 0.8.34.0 to 0.8.35.0. I tried the following, but was stalled in the regex...

#!/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;

Update
Ok OK!! Folks, flowering TMTOWTDItis .. :-D Thanks! -- allan
#!/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";
Beast regards -- allan

Replies are listed 'Best First'.
Re: RegEx bump version number
by jettero (Monsignor) on Apr 25, 2007 at 17:33 UTC

    Well, ... would {$1}$2+1{$3} normally compile?

    That /e means to evaluate the rhs like it was any other block of perl code.

    I suspect you want something more like $version =~ s/(\d+)(?=\.\d+\z)/$1 + 1/e;

    -Paul

Re: RegEx bump version number
by NetWallah (Canon) on Apr 25, 2007 at 17:40 UTC
    Try:
    $version =~ s/(\d+\.\d+\.)(\d+)(\.\d+)/$1.($2+1).$3/e;
    (Works for me).jettero(++)'s more concise code also works.

         "Choose a job you like and you will never have to work a day of your life" - Confucius

      Bingo! String cat seems to be the solution -- tnx a load!
      allan
Re: RegEx bump version number
by shigetsu (Hermit) on Apr 25, 2007 at 17:43 UTC
    A regular expression free version (not arguing for or against):
    $version = do { my $v = [ split /\./, '0.8.34.0' ]; $v->[2]++; join '. +', @$v };

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://612060]
Approved by shigetsu
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2022-08-17 01:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?