/^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
####
/^(?=.{10})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#\$%^&+=])/s
####
/.{10}/s && /\d/ && /[a-z]/ && /[A-Z]/ && /[@#\$%^&+=]/
####
lenght() >= 10 && /\d/&&1 + /[a-z]/&&1 + /[A-Z]/&&1 + /[@#\$%^&+=]/&&1 == 4
or die;
####
use List::Util qw( sum );
lenght() >= 10 && sum( /\d/, /[a-z]/, /[A-Z]/, /[@#\$%^&+=]/ ) == 4
or die;
####
m{
(?{ 0 })
^
(?>
(?=.{10})
(?=.* \d (?{ $^R+1 }) | )
(?=.* [a-z] (?{ $^R+1 }) | )
(?=.* [A-Z] (?{ $^R+1 }) | )
(?=.* [@#\$%^&+=] (?{ $^R+1 }) | )
)
(?(?{ $^R != 3 })(?!))
}xs
or die;