Лучше использовать Time::Piece
сделать синтаксический анализ и форматирование дат. Это встроенный модуль и не требует установки.
Необычно, в этом случае строка даты/времени замены точно такая же, как и исходная строка, считанная из файла, поэтому модификация может быть выполнена на месте. Обычно общая длина файла изменяется, поэтому необходимо либо создать новый файл, либо удалить старый, либо прочитать весь файл в памяти и записать его снова.
Эта программа открывает файл для одновременного чтения/записи, считывает первую строку из файла, анализирует его с помощью Time::Piece
, добавляет две минуты (120 секунд), снова ищет начало файла и печатает новую дату/время, отформатированное так же, как оригинал, обратно в файл.
use strict;
use warnings;
use autodie;
use Time::Piece;
my $format = '%Y/%m/%d-%H:%M:%S';
open my $fh, '+<', 'ex.txt';
my $date_time = <$fh>;
chomp $date_time;
$date_time = Time::Piece->strptime($date_time, $format);
$date_time += 60 * 2;
seek $fh, 0, 0;
print $fh $date_time->strftime($format);
close $fh;
выход
2013/07/29-19:00:04
Вместо 'system' используйте' $ а = QX (дата '+ ...') ', а затем (если это необходимо для некоторого другого процесса) напишите '$ a' в файл. Не используйте голые дескрипторы файлов; используйте 'open my $ f, $ path, $ mode' вместо этого. Не 'chop' переменная, если вы просто собираетесь добавить в нее новую строку. Не используйте человеческие метки времени: вместо этого используйте эпоху. –
@WilliamPursell: не используйте внешнюю команду, чтобы получить текущее время в * любом * формате – ysth
Пожалуйста, xplain лучше, что вы хотите сделать. Можно ли изменить файл, содержащий дату/время, чтобы продвинуть это время на две минуты? Или вы хотите распечатать текущее время плюс две минуты на консоли? Или записать его в файл? – Borodin