我正在尝试运行此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';
答案 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 , $_; }
}