use warnings; use strict; my %lines; while () { my ($num) = $_ =~ /(\d+)$/; $lines{$num} = $_; } for (sort {$a <=> $b} keys %lines) { print $lines{$_}; } __DATA__ foo bar 4 goo 1 hoo boo boo 2 yeah 3