2012-06-28 49 views
1
use Text::Diff; 
for($count = 0; $count <= 1000; $count++){ 
    my $data_dir="archive/oswiostat/oracleapps.*dat"; 
    my $data_file= `ls -t $data_dir | head -1`; 
    while($data_file){ 
     print $data_file; 
     open (DAT,$data_file) || die("Could not open file! $!"); 
     $stats1 = (stat $data_file)[9]; 
     print "Stats: \n"; 
     @raw_data=<DAT>; 
     close(DAT); 
     print "Stats1 is :$stats1\n"; 
     sleep(5); 
     if($stats1 != $stats2){ 
     @diff = diff \@raw_data, $data_file, { STYLE => "Context" }; 
     $stats2 = $stats1; 
     } 
     print @diff || die ("Didn't see any updates $!"); 
    } 
} 

輸出:在Perl中,我怎樣才能看到一個目錄的變化?

$ perl client_socket.pl 
archive/oswiostat/oracleapps.localdomain_iostat_12.06.28.1500.dat 
Stats: 
Stats1 is : 
Didn't see any updates at client_socket.pl line 18. 

你能告訴我,爲什麼統計數據缺失,以及如何解決它?

+5

我不相信那是你實際運行的代碼。 $ data_file將包含文件的名稱後跟一個換行符,所以打開會失敗,所以它會死。 chomp會解決這個問題。還有很多其他的問題,但對那些不是你的代碼的東西有什麼意見?我強烈建議你先加入'use strict;使用警告;'並修復這些錯誤。 – ikegami

+0

它有文件,因爲你看它打印在第一行爲「archive/oswiostat/oracleapps.localdomain_iostat_12.06.28.1500.dat」 – VeerM

+0

不,它有'「archive/oswiostat/oracleapps.localdomain_iostat_12.06.28.1500.dat \ n「' – ikegami

回答

2

請注意,我正在回答您的原始問題,爲什麼stat()似乎失敗了,而不是新編輯的問題標題,它會詢問不同的問題。

這是修復:

my $data_file= `ls -t $data_dir | head -1`; 
chomp($data_file); 

原因這是修復是有點陰暗。如果沒有那chomp(),$data_file包含尾隨換行符:"some_filename\n"open()ignores trailing newlines in filenames and I don't know why 的兩個參數形式因爲兩個arg打開模仿shell的行爲。但是,您撥打stat()時不會忽略文件名中的換行符,因此它是stat()中不存在的文件,因此$stats1undef

+0

@picrow thans尋求幫助。很長一段時間後,我很感激perl,感謝您的快速幫助。我需要更正if循環中的$ stats2。這個變量應該是全局的,我應該如何解決這個問題。截至目前stats2顯示爲空。 – VeerM

13

真正的修復程序是File::ChangeNotifyFile::Monitor或類似的東西(例如,在Windows上,Win32::ChangeNotify)。

use File::ChangeNotify; 

my $watcher = File::ChangeNotify->instantiate_watcher(
    directories => [ 'archive/oswiostat' ], 
    filter => qr/\Aoracleapps[.].*dat\z/, 
); 

while (my @events = $watcher->wait_for_events) { 
    # ... 
} 
+0

+1對於[XY問題](http://www.perlmonks.org/?node_id=542341) – pilcrow

+1

+1:思南:我需要這個功能,我認爲你的文章可以幫助我。 –