ユニークリストの読込/保存

#!perl

use strict;
use warnings;
use Carp;

sub load_uniq_list(%) {
    my %args = @_;

    defined $args{fname} or confess "no fname";
    ref $args{list} eq 'ARRAY' or confess "no list";

    open my $fh, '<', $args{fname} or confess $!;
    my %exists = map { chomp; $_ => 1 } <$fh>;
    close $fh;

    @{$args{list}} = sort keys %exists;

    1;
}

sub save_uniq_list(%) {
    my %args = @_;

    defined $args{fname} or confess "no fname";
    ref $args{list} eq 'ARRAY' or confess "no list";

    open my $fh, '>', $args{fname} or confess $!;
    my %exists = map { $_ => 1 } @{$args{list}};
    print $fh "$_\n" for sort keys %exists;
    close $fh;

    1;
}

use Data::Dumper;
my @list1 = (5,2,1,2,3);
save_uniq_list(fname=>'data.txt', list=>\@list1);
my @list2;
load_uniq_list(fname=>'data.txt', list=>\@list2);
print Dumper \@list2;

exit;