2011-11-01 32 views
0

是否有一種更有效的方式獲取perl中的日期,並且我看到open語句格式不同 - 這是打開文件的可接受方式嗎?perl - 打開文件 - 獲取日期

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; 
} 
+1

呃,是的。不要這樣做。 http://perldoc.perl.org/functions/localtime.html和...您可能還想閱讀如何實際打開和閱讀文件。 –

+1

您的代碼示例在「我的文件」行上有一個致命錯誤。我想,你並不是想要本地化一個裸文件句柄。 – pilcrow

回答

4

至於日期:

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

開放最佳做法是三個參數開 - 沒必要more它。

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

還要注意使用詞彙文件句柄($fh),今天也是優選的。

2

不要分叉外部命令(例如'date'和'more')來完成Perl本質上可以做的事情。如前所述,您可以使用POSIX模塊的strftime()格式化從服務器本地時間獲得的時間戳。

打開()使用三個參數的形式爲安全:

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

這將打開輸入,如果出現錯誤報告,(通過「$!」)和死亡。而非裸字文件句柄(例如FILE)使用autovivified一個這樣的:

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

參見perlopentut的詳細資料:perlopentut