File :: Find :: Rule :: LibMagic: Можно ли хранить параметры с неопределенными значениями? - PullRequest
2 голосов
/ 05 февраля 2012

Можно ли сохранить параметры с неопределенными значениями (в данном случае 'maxdepth')?

#!/usr/bin/env perl
use warnings;
use 5.012;
use File::Find::Rule::LibMagic qw(find);
use Getopt::Long qw(GetOptions);

my $max_depth;
GetOptions ( 'max-depth=i' => \$max_depth );
my $dir = shift;

my @dbs = find( file => magic => 'SQLite*', maxdepth => $max_depth, in => $dir );
say for @dbs;

Или я должен написать это так:

if ( defined $max_depth ) {
    @dbs = find( file => magic => 'SQLite*', maxdepth => $max_depth, in => $dir );
} else {
    @dbs = find( file => magic => 'SQLite*', in => $dir );
}

Ответы [ 2 ]

6 голосов
/ 05 февраля 2012

Не должно быть проблем с установкой maxdepth на undef, используя переменную с undef в качестве значения.Каждая переменная в Perl начинается со значения undef.

Подробнее

File::Find::Rule::LibMagic extends File::Find::Rule.Функция find в File::Find::Rule начинается с:

sub find {
    my $object = __PACKAGE__->new();

Функция new возвращает:

bless {
    rules    => [],
    subs     => {},
    iterator => [],
    extras   => {},
    maxdepth => undef,
    mindepth => undef,
}, $class;

Обратите внимание, что по умолчанию maxdepth установлено на undef.

1 голос
/ 05 февраля 2012

OK? Это, вероятно, не смущает File :: Find :: Rule

$ perl -MFile::Find::Rule -le " print for File::Find::Rule->maxdepth(undef)->in( q/tope/ ) "
tope
tope/a
tope/b
tope/c
tope/c/0
tope/c/1
tope/c/2

$ perl -MFile::Find::Rule -le " print for File::Find::Rule->maxdepth(1)->in( q/tope/ ) "
tope
tope/a
tope/b
tope/c

$ perl -MFile::Find::Rule -le " print for File::Find::Rule->maxdepth(-1)->in( q/tope/ ) "
tope

$ perl -MFile::Find::Rule -le " print for File::Find::Rule->maxdepth(2)->in( q/tope/ ) "
tope
tope/a
tope/b
tope/c
tope/c/0
tope/c/1
tope/c/2

$ pmvers File::Find::Rule
0.33
...