open(my $fh, "tempfile") or die("ack - $!");
chomp( my $header = <$fh> );
my(undef, @headers) = split ' ', $header;
my(%cols) = do {
my $i = 0;
map { $_ => $i++ } @headers;
};
my %info;
while(<$fh>) {
chomp;
next if m< ^ \s* \z >x;
my($name, @rows) = split;
push @{ $info{$name} }, @rows;
}
close $fh;
####
open(my $fh, ">", "output") or die("ack - $!");
print $fh $header;
print $fh "$_ @{ $info{$_} }\n" for reverse sort {
$info{$a}->[ $cols{z} ] <=> $info{$b}->[ $cols{z} ]
} keys %info;
close $fh;
####
my(@list) = "foo bar baz" =~ m< (?: (\w+) \s* )+ >x;
print "@list";
__ouput__
baz
# not - foo bar baz
####
my(@list) = "foo bar baz" =~ m< (\w+) [ ]? >xg;
print "@list";
__output__
foo bar baz