やりたいことをちゃんと書いてる間に解決策が・・・
ありがとうございました!

やりたかったこと(解決バージョン)
$aaa = '1234aaaa5678bbb9876ccc';
@list = &func($aaa);
print join(',', @list), "\n";

sub func(){
 my $str = shift;
 my $list;
 $list = sub {
  my $var = shift;
  $var =~ /(\d+)(.*)/;

  my $first = $1;
  my $rest = $2;
  print $rest, "\n";
  if($first =~ /\d+/){
   return ($first, $list->($rest));
  }else{
   return ();
  }
 };
 return $list->($str);
}