in reply to Bug? Use of uninitialized value $1 in substitution iterator

$1 is undefined, and any use of undef will trigger the warning. You can use the following regex if you don't want to turn the warnings off:
s{^(?:aa(bb))?.*}{defined($1)?$1:q{}}ei;
The e switch lets you use code for the replacement, so you can test whether $1 is defined before using it, and if it's not defined, use the empty string instead.