in reply to Comparing revision numbers

The problem is in line 42 of your code.

(Or phrased differently, if you showed your code, it would be much easier to help you).

Update:

Running your code with

use strict; use warnings; # your code here... print rev_compare('1.3', '*');

Results in an error:

Too many arguments for main::rev_compare at foo.pl line 54, near "'*') +" Execution of foo.pl aborted due to compilation errors.

Removing the () after the sub rev_compare fixes this. Then I get

Argument "" isn't numeric in numeric eq (==) at foo.pl line 39. 0
Line 39 is     if ($section_major_number == $main_minor_number)

Which reveals a problem of your code: you don't have sane handling for when the numbers don't contain a dot. Also you only check the first argument for being an asterisk, not the second.

I'd suggest this code instead:

sub rev_compare { my $section = shift; my $main = shift; return 1 if $section eq '*' or $main eq '*'; my @section = split /\./, $section; my @main = split /\./, $main; return ($section[0] == $main[0]) && (($section[1] eq '*' && $main[1] eq '*') || $section[1] == $main[1]); }

I haven't tested it with all values, but it should handle * as the value of the minor version number just fine

Perl 6 - links to (nearly) everything that is Perl 6.

Replies are listed 'Best First'.
Re^2: Comparing revision numbers
by zek152 (Pilgrim) on Jul 12, 2010 at 18:09 UTC

    My apologies. I have updated the original post.

    Update. Thanks, I felt like i was going about it really poorly. Thanks for the help.