perl - открыть файл - получить дату - PullRequest
0 голосов
/ 01 ноября 2011

Есть ли более эффективный способ получения даты в perl, и я видел выражение open, отформатированное по-другому - это приемлемый способ открытия файла?

06:27:54 /data/noc/startup/startup_ptf_pats.sh startup initiated by waljoh @ Tue Nov  1      06:27:54 EDT 2011
06:27:54 /data/noc/startup/startup_ptf_pats.sh verifying that engine is change controlled
06:27:54 /data/noc/startup/check_change_controlled_files.sh all change controlled commands files are in synch
06:27:54 /data/noc/startup/check_today_is_holiday.sh Today is NOT a holiday
06:27:54 /data/noc/startup/check_ntpq.sh 159.79.35.42 time offset (0) is below 100   

Это сценарий, который я написал:

#!/usr/bin/perl
use warnings;
use strict;

my $todays_date = `/bin/date +%m-%d-%y`;
chomp $todays_date ;

my $grabDIR = "/data/noc/startup/logs/";
my $grabFILE = "pats." . "$todays_date" . ".txt";

print "$grabDIR$grabFILE\n" ;

my FILE;
open (FILE, "more $grabDIR$grabFILE | ");
while (<FILE>) {
        my $line = $_;
        print $line; 
        sleep 1;
}

Ответы [ 2 ]

4 голосов
/ 01 ноября 2011

По состоянию на дату:

use POSIX ();
my $todays_date = POSIX::strftime( '%m-%d-%Y', localtime );

Лучшие методы для open - это открытый с тремя аргументами - и нет необходимости more.

open( my $fh, '<', "$grabDIR$grabFILE" ) 
    or die "Could not open $grabDIR$grabFILE! - $!"
    ;

Также обратите внимание на использование лексического дескриптора файла ($fh), также предпочтительного сегодня.

2 голосов
/ 01 ноября 2011

Не разветвляйте внешние команды (например, 'date' и 'more'), чтобы делать то, что Perl может сделать по своей природе. Как уже отмечалось, вы можете использовать функцию strftime () модуля POSIX для форматирования отметки времени, полученной из локального времени вашего сервера.

Для open () используйте безопасную форму с тремя аргументами:

open (FILE, '<', $grabDIR$grabFILE) or die "Can't open $grabDIR$grabFILE: $!\n";

Это открывается для ввода и, если происходит ошибка, сообщает об этом (через '$!') И умирает. Вместо дескриптора файла с пустым словом (например, ФАЙЛ) используйте автовифицированный, например:

 open (my $fh, '<', $grabDIR$grabFILE) or die "Can't open $grabDIR$grabFILE: $!\n";
 while (<$fh>) {
     ...

См. Perlopentut для получения дополнительной информации: perlopentut

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...