use warnings; use strict; my $string = 'Three, Four, One, Two, xFive9, six, Seven'; my $number = qr{ \b [[:upper:]] [[:lower:]]+ \b }xms; print qq{string is now '$string' \n}; my $ordinal = 0; $string =~ s{ ($number) } { ask_replace(++$ordinal, $-[1], $1) }xmsge; print qq{new string is '$string' \n}; print qq{done! \n}; sub ask_replace { my ($ordinal, $offset, $string, ) = @_; my $yes = qr{ (?i) y (?: e (?: s)? )? }xmso; my $ok = qr{ (?i) o (?: k)? }xmso; my $accept = qr{ \A (?: $yes | $ok) \Z }xmso; print qq{sub-string $ordinal at offset $offset is '$string' \n}; print qq{is this correct? }; my $answer = ; return $string if $answer =~ $accept; print qq{no: enter new string: }; chomp(my $replace = ); return $replace; }