#!/usr/local/bin/perl $DATA='data.txt'; open (DATA,"<$DATA") || die "Can't open $DATA $!"; # # Why do this??? # # @line = ; #foreach (@line) { # # for future reference, chop is unsafe ( it cuts off the last # character, no matter what it is ) use chomp instead, it # takes off all of the trailing whitespace. # # chop; # #the brackets around split are unnecessary # # ($key, $one, $two, $three, $four, $five, $six) = (split(/,/)); # # This is completely unnecessary ( since they are already null if they do not exist ) # the only things you might get are warnings of uninitialized variables. # # $key = "" if !defined($key); #this should make it null if nothing's there # $one = "" if !defined($one); # $two = "" if !defined($two); # $three = "" if !defined($three); # $four = "" if !defined($four); # $five = "" if !defined($five); # $six = "" if !defined($six); #} # # Notice Code, ALA Schwartz # #while () { # chomp; # my @line = split /,\s*/; # my $key = shift @line; # push @{$data{$key}}, \@line; #} # while () { chomp; # # Once again brackets around split are totally unnecessary # # # if you do not put my in front of @line, when you # push the reference (\@line), onto the array in the hash, # you will get a reference to the same array over and over # # also would be good to put my in front of $key, although # not necessary # @line = split(/,\s*/); # was getting errors on split /,\s*/; $key = shift @line; push @{$data{$key}}, \@line; } print $data{"Andrea"}[0][1], " should be good\n"; # offsets off by one print $data{"Dave"}[0][1], " should be better\n"; print $data{"Joe"}[0][1], " should be 0\n"; # # Good programming Style # close(DATA);