##
# optional read without Path::Tiny
my @words = do { local(@ARGV, $/) = $filename; <> =~ /^.+$/gm };
# or
my @words = do { local(@ARGV, $/) = $filename; split /\n/, <> };
####
# write
use Path::Tiny;
use List::Util qw( uniq );
path($filename)->spew(join "\n", uniq(@words), '');