use strict; use warnings; my @items; while () { chomp; my ($year, $make, $model, $price) = split; push @items, {year => $year, make => $make, model => $model, price => $price}; } my $lookFor = lc ; chomp $lookFor; die "year, make, model or price expected\n" if $lookFor !~ /^(year|make|model|price)$/; my @sorted = sort {$a->{$lookFor} cmp $b->{$lookFor}} @items; printf "%4s %-6s %-6s %6s\n", @{$_}{qw(year make model price)} for @sorted; __DATA__ YEAR MAKE MODEL PRICE 2003 abc rel 999 1999 hds sdf 100 2010 kls pol 1400