#!/usr/bin/perl use warnings; use strict; use Syntax::Construct qw( // ); my %map; my $sep = '^'; my @flds; # Loop through the lines and create hashmap while (my $line = <DATA>) { chomp $line; @flds = split /\^/, $line; next if 1 == $.; $map{$flds[0]}{$flds[1]} = $flds[2]; } # Print the header line print "Name"; my %codes; undef @codes{map keys %$_, values %map}; for my $k (sort keys %codes){ print "$sep$k"; } print "\n"; # Print the table for my $k1 (sort keys %map) { print $k1; for my $k2 (sort keys %codes) { print "$sep", $map{$k1}{$k2} // q(); } print "\n"; }
You can profit from the // operator to avoid undefined warnings, but only if your Perl is 5.10+. Also, I extracted the codes from the %map hash (no need to create a hash reference) with a "slice". But all these are just minor things. Moreover, you correctly identified the places where the code didn't flow smoothly.
In reply to Re: Print something when key does not exist
by choroba
in thread Print something when key does not exist
by jaypal
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |