use strict;
use warnings;
use Data::Dumper;
my $string_exp = 'something in this string is a number. ${=NumberFormat "99999999"} is a number. And another ${=CharFormat "X*"} is ${=NumberFormat "9+"}.';
my @pieces = split /(\$\{.*?\})/, $string_exp;
print Dumper \@pieces;
####
$VAR1 = [
'something in this string is a number. ',
'${=NumberFormat "99999999"}',
' is a number. And another ',
'${=CharFormat "X*"}',
' is ',
'${=NumberFormat "9+"}',
'.'
];
####
$VAR1 = [
'something in this string is a number. ',
'${=NumberFormat "99999999"}',
' is a number. And another ',
'${=CharFormat "X*"}',
' is $=NumberFormat "9+"}.'
];