use warnings; use strict; @ARGV or die "You need to supply a file name.\n"; open my $fh, '<', shift or die "$!\n"; my @lines = <$fh>; my %unique; @unique{@lines} = (1) x @lines; # unique lines #print keys %unique; # unique sorted lines #print sort keys %unique; # unique lines in order seen in original file do { print if delete $unique{$_} } for @lines;