Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
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 rifling through the Monastery: (3)
As of 2022-09-29 20:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I prefer my indexes to start at:




    Results (125 votes). Check out past polls.

    Notices?