use strict; use warnings; my %datehash = ( jan => 1, feb => 2, mar => 3, apr => 4, may => 5, jun => 6, jul => 7, aug => 8, sep => 9, oct => 10, nov => 11, dec => 12 ); while () { chomp; my $data = lc $_; next unless $data =~ /(\D{3}) \s* (\d{1,2}) \s* (\d{4})/x; next unless exists $datehash{$1}; my $month = $datehash{$1}; printf "%04d%02d%02d\n", $3, $month, $2; } __DATA__ Oct 16 2004 11:09:19:943AM Mar 3 2007 10:30:31:170PM #### 20041016 20070303