#!/usr/bin/perl -w # "-w" turns on all sorts of warnings about probable errors. use diagnostics; # optional; causes warnings to be explained in greater detail. use strict; my @workers; my $h = {name => "Herb", salary => 250000, job => "doctor"}; push(@workers, $h); $h = {name => "Marge", salary => 400000, job => "ceo"}; push(@workers, $h); $h = {name => "Ingmar", salary => 50000, job => "painter"}; push(@workers, $h); print "\n Unsorted list\n"; show(@workers); my @sort2 = sort by_sal @workers; print "\n Sorted by salary\n"; show(@sort2); sub by_sal { my %worka = %$a; my %workb = %$b; my $empa = $worka{"salary"}; my $empb = $workb{"salary"}; if ($empa < $empb) { return -1; } elsif ($empa == $empb) { return 0; } elsif ($empa > $empb) { return 1; } } sub show { foreach my $workref (@workers) { my %work = %$workref; print "Name: ", $work{"name"}, "\t"; print "Salary: ", $work{"salary"}, "\t"; print "Job: ", $work{"job"}, "\n"; } }