sub clean_list { my $type_of_arg=ref(\@_); my @array_with_duplicates=(@_); my @array_no_duplicates; if($type_of_arg eq 'ARRAY') #if the list is passed as an array { my $previous = ''; while (scalar @array_with_duplicates > 0) { my $next = shift(@array_with_duplicates); if ($previous ne $next) { push(@array_no_duplicates, $next); $previous = $next; } } } elsif($type_of_arg eq 'REF') #if the list is passed as a reference to an array { my %hash; @hash{@{$_[0]}}=(); #@{$_[0]}=keys %hash; @array_no_duplicates=keys %hash; } return (@array_no_duplicates); } open(IN, '<', 'ex5.acc') or die "Could not read file\n"; my @initial_array = ; close IN; @initial_array = sort @initial_array; my @final_array = clean_list(@initial_array); #this works # @final_array = clean_list(\@initial_array); #this does not work # Save the clean table open(OUT, ">", "ex5.acc.CLEAN") or die "Could not create file\n"; print OUT @final_array; close OUT;