use diagnostics; use strict; use warnings; my @randomParameters = ('Abc.123', '../../', 'a@b.c', '789'); my @allowedSymbols = ('.', '@'); my (@goodParams, @badParams); checkParam($_, 1, 1, @allowedSymbols) for (@randomParameters); print $_, " is good\n" for @goodParams; print $_, " is bad\n" for @badParams; sub checkParam { my $param = shift; my $alpha = shift; # if true allow alpha my $numeric = shift; # if true allow numeric my @symbols = @_; # allow all symbols in @_ my $regex = ""; $regex .= '([a-zA-Z' if $alpha; $regex .= '0-9' if $numeric; for my $symbol (@symbols) { $regex .= $symbol; } $regex .= ']*)'; my $pattern = qr/^${regex}$/; if ($param =~ /$pattern/) { push(@goodParams, $param); } else { push(@badParams, $param); } }