无法使用Perl将目录名称打印到文件

时间:2011-07-25 18:57:52

标签: perl

我正在尝试运行此Perl脚本,但它未按要求运行。它应该存储文件夹名称的值,格式为日期(例如:11-03-23)

我的帐户中有一些文件夹放在这个位置:
    / 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';

3 个答案:

答案 0 :(得分:2)

您缺少-d的参数。试试-d "$dir/$_" && ...。 (除非当前目录始终是您正在阅读的目录。)

几乎没有理由使用商店而不是Storable :: nstore。

你为什么要打印dh?

答案 1 :(得分:1)

$dh是目录句柄对象。打印它没什么用处。

Storable::store的输出不是人类可读的。如果您期望processed_dirs.dat中有可读的内容,请不要......您需要使用Storable::retrieve通过perl将其取回,或Data::Dumper打印出变量可读的格式。

答案 2 :(得分: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 , $_; }
}