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