my %memoize; foreach my $range (values %Build) { $message =~ s{ (\[ ([$range]+) \]) }{ my $val = exists($memoize{$2}) ? $memoize{$2} : return_number("$2"); $memoize{$2} = $val; defined($val) ? $val : $1 }exig }