#!/usr/bin/perl
use strict;
use warnings;
my @array = (3,2,1,1,1,2,3,4,6,"",5,"","",9,"","");
my @clean_array = clean(@array);
my @clean_ord_array = clean_ord(@array);
print "\nclean_array:\n";
map { print "elem: $_\n"; } @clean_array;
print "\nclean_ord_array:\n";
map { print "elem: $_\n"; } @clean_ord_array;
# clean, don't preserve order
sub clean {
my @clean = @_;
my @seen;
my @cleaned;
my %seen;
my $i;
for ( $i = 0 ; $i <= $#clean ; $i++ ) {
unless ( ( defined $clean[$i] ) && ( $clean[$i] ne '' ) ) {
splice @clean, $i, 1;
}
}
@seen{@clean} = ();
@cleaned = sort keys %seen;
if (wantarray) {
return @cleaned;
}
else {
if ( defined($/) ) {
return join "$/", @cleaned;
}
else {
return join "\n", @cleaned;
}
}
}
# clean, preserve order
sub clean_ord {
my @clean = @_;
my $clean;
my @seen;
my @cleaned;
my %seen;
my $i;
for ( $i = 0 ; $i <= $#clean ; $i++ ) {
unless ( ( defined $clean[$i] ) && ( $clean[$i] ne '' ) ) {
splice @clean, $i, 1;
}
}
foreach $clean (@clean) {
unless ( exists $seen{$clean} ) {
push ( @cleaned, $clean );
$seen{$clean} = 1;
}
}
if (wantarray) {
return @cleaned;
}
else {
if ( defined($/) ) {
return join "$/", @cleaned;
}
else {
return join "\n", @cleaned;
}
}
}
####
clean_array:
elem:
elem: 1
elem: 2
elem: 3
elem: 4
elem: 5
elem: 6
elem: 9
clean_ord_array:
elem: 3
elem: 2
elem: 1
elem: 4
elem: 6
elem: 5
elem:
elem: 9
####
clean_array:
elem: 1
elem: 2
elem: 3
elem: 4
elem: 5
elem: 6
elem: 9
clean_ord_array:
elem: 3
elem: 2
elem: 1
elem: 4
elem: 6
elem: 5
elem: 9