Невозможно напечатать имена каталогов в файл, используя Perl - PullRequest
0 голосов
/ 25 июля 2011

Я пытаюсь запустить этот Perl-скрипт, но он не работает должным образом.Предполагается хранить значения имен папок в формате даты (пример: 11-03-23)

У меня есть несколько папок, размещенных в этом месте в моей учетной записи:
/ hqfs /datastore / files

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

Я храню их в файле "processing_dirs.dat".

Но в выводе: я получил "pst12345678" в процессе_данных.dat

И когда я напечатал $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 ]

2 голосов
/ 25 июля 2011

Вам не хватает аргумента для -d.Попробуйте -d "$dir/$_" && ....(Если текущий каталог не всегда будет каталогом, который вы читаете.)

Почти нет причин использовать хранилище вместо Storable :: nstore.

Почему вы пыталисьпечать dh?

1 голос
/ 25 июля 2011

$dh является объектом дескриптора каталога. Ничего полезного вы не получите, напечатав его.

Вывод Storable::store не предназначен для восприятия человеком. Если вы ожидаете что-то читаемое в processed_dirs.dat, не ... вам нужно будет использовать Storable::retrieve для извлечения его через perl или Data::Dumper для распечатки переменной в читаемом формате. *

0 голосов
/ 26 июля 2011

Эта реализация работает и дает вам точную информацию.

#!/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 , $_; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...