Not bad, but there's a couple things I'd do slightly different, in the interest of scalability. Also, assigning to arrays outside the sub from inside the sub couples your routine too tightly to this particular program. Here's my version:
use diagnostics;
use strict;
use warnings;
use Data::Dumper ;
my @randomParameters = ('Abc.123', '../../', 'a@b.c', '789');
my @allowedSymbols = ('.', '@');
my (@goodParams, @badParams);
my @results = checkParam( \@randomParameters,
ALPHA => 1,
NUMERIC => 1,
SYMBOLS => \@allowedSymbols ) ;
print Dumper \@results ;
sub checkParam
{
my ( $param_list, %options ) = @_ ;
my %chartypes = (
'ALPHA' => '[:alpha:]',
'NUMERIC' => '[:digit:]'
) ;
my $regex = '[' ;
## include the character classes.
$regex .= join '' => map { $chartypes{$_} }
grep { $options{$_} } keys %chartypes ;
## include the symbols.
$regex .= join '' => @{$options{'SYMBOLS'}} ;
$regex .= ']+' ;
my $pattern = qr/^$regex$/;
my @results = ([], []) ;
for ( @$param_list )
{
if ( $_ =~ /$pattern/ )
{
push @{$results[0]}, $_ ;
}
else
{
push @{$results[1]}, $_ ;
}
}
return @results ;
}
_______________
DamnDirtyApe
Those who know that they are profound strive for clarity. Those who
would like to seem profound to the crowd strive for obscurity.
--Friedrich Nietzsche
|