in reply to repeated regex capture

First, the simple way to get what you want:
my $str = 'A2ABA45'; my @parts = $str =~ /A[^A]*/g;
or
my @parts = split /(?=A)/, $str;
To explain why you have undef's in your first attempt
use Data::Dumper; my @parts = split /(A.+?)(?=A|$)/, "A2ABA45"; print Dumper(\@parts);
You're treating your wanted text as delimiters that are captured in the split. Just look at this example.
my @parts = split /(-)/, "-1-2-"; print Dumper(\@parts);