perl - 打开文件 - 获取日期

时间:2011-11-01 17:27:20

标签: perl

是否有更有效的方式在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 个答案:

答案 0 :(得分:4)

关于日期:

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

开放的最佳实践是3参数公开 - 而不需要more它。

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

另请注意使用 lexical 文件句柄($fh),今天也是首选。

答案 1 :(得分:2)

不要使用外部命令(例如'date'和'more')来执行Perl本身可以执行的操作。如前所述,您可以使用POSIX模块的strftime()来格式化从服务器本地时间获得的时间戳。

对于open(),请安全地使用三参数形式:

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

这将打开输入,如果发生错误报告(通过'$!')并死亡。而不是一个简单的文件句柄(例如FILE)使用这样的自动化文件:

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

有关详细信息,请参阅perlopentut:perlopentut