A better bet is to generate a string from that array and insert it into the regex pattern. I did this below with the string $chars6_class. Note that I escaped many of the symbols which have special meaning in regex and perl, though I didn't really double check I got all the right ones.
Then I use the back reference, \1, to look for two more occurrences of what I just found.
my @chars6 = ('0'..'9', 'a'..'z', 'A'..'Z', '!','\@', '#',
'\$', '\%','^', '&', '\*', '\(', '\)', '<', '>', '\?',
'`', '\+', '\/', '\[', '\{', '\]','\}', '\|', '=','_',
'~', ',', '\.');
my $chars6_class = '[' . join( '', @chars6) . ']';
if ($password=~ m/($chars6_class)\1{2}/)
{
# regenerate password
}
Further, I would take a look at the posix character classes to see if there is already a set of what you are looking for. My guess would be that you could just use the below regex instead of dealing with an array of characters.
m/([[:alnum:]]|[[:punct:]])\1{2}/
|