my %dateformat = ( '99(.)99(.)99' => '"DD${1}MM${2}RR"', '99(.)99(.)9999' => '"DD${1}MM${2}YYYY"', '9999(.)99(.)99' => '"YYYY${1}MM${2}DD"', ); DATE: while () { ## updated: it was 'foreach' chomp; foreach my $k (keys %dateformat) { next unless /^$k$/; my $trans = $_; $trans =~ s/^$k$/$dateformat{$k}/ee; print "translated <$_> to <$trans>\n"; next DATE; } warn "$_ unmatched\n"; } __DATA__ 99/99/9999 99/99/99 99-99-9999 9999999 9999@99#99