On 8/21/07, Tony Heal <[EMAIL PROTECTED]> wrote:
> OK I added this and I keep getting invalid format
>
> foreach (@newValues){print "$_\n";}
>         my @versions;
>         while (@newValues)
>         {
>                 chomp;
>                 die "invalid format" unless
>                 my ($major, $minor, $build) = /(\d+)(?:-.+)?\.(\d+)-(\d+)/;
>                 push @versions, [ $major, $minor, $build , $_];
>         }
>         foreach (@versions){print "$_\n";}
> }
snip

That would be because the code makes no sense.  My example read the a
version at a time from the DATA file handle, transformed it, and
pushed it onto an array, then sorted the array and printed it.  Yours
has all of the versions in an array and tries to loop over the array
with a while loop (doesn't work to start with) and you never bother to
sort the data.  If you aren't reading from a file then you might as
well add the first loop back onto the Schwartzian transform (map ->
sort -> unmap).  Please note that

die "bad format" unless
        my ($major, $minor, $build) = /(\d+)(?:-.+)?\.(\d+)-(\d+)/;

is one statement and should be indented as above.  If you don't indent
it looks like the die and the assignment are unrelated.  If you find
the style confusing you may consider using this instead

my ($major, $minor, $build) = /(\d+)(?:-.+)?\.(\d+)-(\d+)/
        or die "bad format";



#!/usr/bin/perl

use strict;
use warnings;

#I don't know how you are getting these values
my @newValues = map { chomp; $_ } <DATA>;

print "unsorted\n";
print "$_\n" for @newValues;

@newValues =
        #unmap to recover the original data
        map { $_->[0] }
        #sort
        sort {
                $a->[1] <=> $b->[1] or
                $a->[2] <=> $b->[2] or
                $a->[3] <=> $b->[3]
        }
        #map into a sortable form
        map {
                die "bad format" unless
                        my ($major, $minor, $build) =
/(\d+)(?:-.+)?\.(\d+)-(\d+)/;
                [$_, $major, $minor, $build]
        }
        @newValues;

print "sorted\n";
print "$_\n" for @newValues;

__DATA__
16.1-17
16.1-22
16.1-23
16.1-39
16.3-1
16.3-6
16.3-7
16.3-8
16.3-15
16.5-1
16.5-2
16.5-10
16.5-13
15.3-12
15.2-108
14-special.1-2
14-special.1-8
14-special.1-15
14-special.2-40
14-special.2-41
14-special.3-4
14-special.3-7
14-special.3-12
15.2-110
15.2-111
15-special.1-52
15-special.1-53
15-special.1-54
16-special.4-9
16-special.4-10
16-special.5-1
16-special.5-2
16-special.6-6

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to