in reply to RegEx ignoring intervening characters?

The class of non uppercase English characters is [^A-Z]. So you need

$str =~ /^A[^A-Z]*B[^A-Z]*C[^A-Z]*D$/;

You can write this a little more clearly as:

my $nu = qr/[^A-Z]*/; $str =~ /^ A ${nu} B ${nu} C ${nu} D $/x;

(Use [:^upper:] or the Unicode \P{IsUpper} for non-English text.)