Привет, Я использую приведенный ниже код для замены форматов даты, но я не могу понять, как глобально изменить все даты. В настоящее время скрипт находит и заменяет даты правильно, но он делает это только для первой даты, найденной внутри строки, но пропускает остальную часть этой строки. Поэтому, если в той же строке есть другая дата, которая должна быть изменена, она игнорирует ее. Я попытался использовать глобальную замену, но безрезультатно. Если бы кто-нибудь мог дать мне представление, я бы очень это оценил.Глобальная подстановка
use strict;
use Time::Piece();
my $file = $ARGV[0];
open FILE, $file or die;
while (my $line = <FILE>) {
chomp $line;
my ($date) = $line =~ m/([A-Z][a-z][a-z] [ \d]{2} \d{4} \d{2}:\d{2}[AP]M)/;
if ($date eq ''){
print "$line\n";
next;
}
my $new_dt = Time::Piece->strptime($date, '%b %d %Y %H:%M%p')->strftime('%Y-%m-%d %H:%M:%S');
$line =~ s/$date/$new_dt/g;
print "$line\n";
}
close FILE;
print "\n";
EDIT: Добавлен пример
Вход:
15 мая 2007 12:00 утра,, 1, 0, 2 февраля 2003 12:00 вечера
Выход:
2007 -05-15 00:00:00,, 1, 0, 2 февраля 2003 г. 12:00 PM
Не могли бы вы предоставить образец ввода и вывода? –
Итерации по совпадениям, найденным с 'm // g'. – syck