Bjorn Van Blanckenberg wrote: > > On 28-feb-04, at 20:32, R. Joseph Newton wrote: > > > Bjorn Van Blanckenberg wrote: > > > >> let say that the file contains these items (every item is seperated > >> with a tab) > >> > >> one title3 state3 name3 pre number3 > >> dip title6 state6 name6 pre2 number6 > > > > So what changes have you made in the code to reflect this diffeence in > > specification. Let us know how *your* adaptations work. > > #!/usr/bin/perl > > use strict; > use Getopt::Long; > > GetOptions(\my %opt, 'filepath=s'); > > my $filepath = (%opt->{'filepath'});
That is not how you access a hash value. There is nothing to dereference as %opt is a hash, not a reference to a hash and a hash value is a scalar so it should start with '$' not '%'. my $filepath = $opt{filepath}; > my @fields = (); > my @sorted = (); > my $lastbit = 1; > my @bits = (); For the array declarations the ' = ()' is redundant as my() creates arrays with that value by default. > open(INFILE,$filepath); You should *ALWAYS* verify that the file was opened successfully. open INFILE, $opt{filepath} or die "Cannot open $opt{filepath}: $!"; > chomp(@fields = <INFILE>); > > @sorted = > map { $_->[0] } > sort { $a->[5] cmp $b->[5] } > map { [ $_ , (split /\t/) ] } @fields; > > foreach (@sorted){ > @bits = split; > print "\n" if ($bits[4] ne $lastbit); Your problem is that all the values in $bits[4] are different so that will always print a newline. > print "$_\n"; > $lastbit=$bits[4]; > } John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>