2017-02-18 18 views
0

Я использую Apache::Log::Parser для анализа файлов журнала Apache.Использование времени :: Piece с Apache :: Log :: Parser

Я извлек дату из файла журнала, используя следующий код.

my $parser = Apache::Log::Parser->new(fast=>1); 
my $log = $parser->parse($data); 
$t = $log->{date}; 

Теперь, я пытался использовать Time::Piece разобрать даты, но я не могу это сделать.

print "$t->day_of_month"; 

Но, это не работает. Как использовать Time :: Piece для синтаксического анализа даты?

ответ

3

Вы не можете вызывать методы для объектов внутри интерполяции строк. Это, вероятно, вывести что-то вроде этого:

Sat Feb 18 12:44:47 2017->day_of_month 

Удалить двойные кавычки "" для вызова метода.

print $t->day_of_month; 

Теперь выход:

18 

Обратите внимание, что вам нужно создать объект Time :: Кусочек с localtime или gmtime, если у вас есть значение века в журнале, или с помощью strptime если дата - это некоторая временная метка.

+0

Удалены двойные кавычки, и он выдает ошибку 'Невозможно вызвать метод" day_of_month "без ссылки на пакет или объект – Pradeep

+0

@Pradeep прочитать последнюю часть моего ответа. Сначала вам нужно создать объект. Просто падение Time :: Piece in не волшебным образом конвертирует какое-то значение в объект даты. – simbabque

+0

Пытался создать новый 'Time :: Piece Object',' Time :: Piece-> strptime ($ log -> {date}, "% Y"); ' , но продолжает метать ошибку ' Время обработки ошибки на C : /xampp/perl/lib/Time/Piece.pm строка 469' – Pradeep