2011-07-25 40 views
0

我試圖運行此Perl腳本,但它並未按需要運行。它應該存儲它們日期的格式(例如:23年11月3日)的文件夾名稱值無法使用Perl將目錄名打印到文件

我在我的帳戶放在這個位置的一些文件夾:
/hqfs /數據存儲/文件

11-02-23 11-02-17 11-04-21 

我將這些存儲在「processed_dirs.dat」文件中。

但在輸出:我在processed_dirs.dat

"pst12345678"當我打印$dh,我得到了一些GLOB(0x12345)事情是這樣的:

請幫我在得到正確的輸出。

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

use Storable; 

# This script to be run 1 time only. Sets up 'processed' directories hash. 
# After this script is run, ready to run the daily script. 

my $dir = '/hqfs/datastore/files'; # or what ever directory the date-directories are stored in 

opendir my $dh, $dir or die "Opening failed for directory $dir $!"; 

my @dir = grep {-d && /^\d\d-\d\d-\d\d$/ && $_ le '11-07-25'} readdir $dh; 

closedir $dh or die "Unable to close $dir $!"; 

my %processed = map {$_ => 1} @dir; 


store \%processed, 'processed_dirs.dat'; 
+0

我沒有看到你的代碼有什麼問題 - 你期望在processed_dirs.dat中找到什麼? 我建議您驗證@dir是否是您期望的: print join「,」,@dir;打印「\ n」; – NetMage

+0

它不會給出任何輸出....我該怎麼辦? – user847323

+1

[ysth](http://stackoverflow.com/users/17389/ysth)發現了錯誤(下文)。嘗試'-d「$ dir/$ _」&& ...',你應該在'@ dir'中找到目錄。對目錄「-d」的測試需要完整的路徑才能正常工作(除非當前目錄將成爲您正在閱讀的目錄)。 –

回答

2

您缺少-d的參數。嘗試-d "$dir/$_" && ...。 (除非當前目錄總是您正在閱讀的目錄。)

幾乎沒有理由使用存儲而不是Stored :: nstore。

你爲什麼要打印DH?

+0

我只想檢查我的perl腳本功能。當我打印「processed_dirs.dat」 - 它不給我結果。所以,我只是測試我的腳本。 – user847323

+0

來測試功能,你可以'使用Data :: Dumper;打印Dumper \%處理;' – ysth

+0

所以,我需要在我的代碼中添加2行--->使用Data :: Dumper;並打印Dumper \%處理;那>它呢? – user847323

1

$dh是一個目錄句柄對象。沒有什麼可以通過打印獲得。

Storable::store的輸出不打算爲人類可讀的。如果您希望在processed_dirs.dat中讀取某些內容,請不要......您將需要使用Storable::retrieve通過perl或Data::Dumper取回它以便以可讀格式打印變量。

+0

那麼現在如何改變我的perl腳本呢?我應該在命令行輸入以在腳本運行後測試我的Perl腳本 – user847323

+1

,執行'perl -MData :: Dumper -MStorable -we'print Dumper retrieve(「processed_dirs.dat」)'' – ysth

+0

perl -MData: :Dumper -MStorable -we - ?我沒有得到這個。這是什麼?高亮部分不清晰 – user847323

0

該實施方式有效併爲您提供準確的信息。

#!/usr/bin/perl 
my $dir = '/Volumes/Data/Alex/'; 
opendir $dh , $dir 
    or die "Cannot open dir: $!"; 
my @result =(); 
foreach (readdir $dh) 
{ 
    if (! /^\d{2}-\d{2}-\d{2}$/) { next; } else { push @result , $_; } 
} 
+0

我需要將文件夾的名稱存儲在散列表中。我怎麼做? – user847323

+0

processed_dirs.dat-在我以前的實現中,我在這裏存儲 – user847323

+0

我檢查了你的代碼....它運行得很好。但是如果我把它放在散列表中,可能嗎? – user847323