2016-01-27 2 views
4

У меня есть функция, где я хочу проверить, существует ли путь, и если да, добавьте это в массив. Вот что я пробовал:Как принять массив выходных параметров и скаляр в perl?

# If a path exists, adds the canonical version of that path to an array 
sub AddPathCandidate { 
    my (@$target, $path) = $_; 
    die ('path needed') unless defined($path); 
    $path = File::Spec->canonpath($path); 
    if (-e $path) { 
     push(@{$target}, $path); 
    } 
} 

где звонящий выглядит следующим образом:

my @exampleDirs =(); 
AddPathCandidate(\@exampleDirs, $inDir . 'a'); 
AddPathCandidate(\@exampleDirs, $inDir . "../b/a/$arch"); 
AddPathCandidate(\@exampleDirs, $inDir . "../../b/a/$arch"); 

Но "умереть" заявление всегда выполняется; второй параметр AddPathCandidate не получается каким-то образом.

Является ли то, что я пытаюсь сделать здесь, даже возможно, или есть еще один способ «perl-ish» для этого?

+1

Этот код не компилируется для меня на Perl 5.16: 'Не может объявить массив разыменования в«мой»в. ..' – toolic

+0

@toolic: Я, вероятно, сломал его, анонимизируя его для этого сообщения. –

+0

@toolic: Кроме того, копия Perl, которую я использую, является древним 5.6, поэтому возможно, что они исправили это с тех пор. –

ответ

7

Объявите переменную как $target при распаковке ваши аргументы, и распаковать из @_:

my ($target, $path) = @_; 
    ^    ^^ 
+0

Итак, одна двойная опечатка на лицевой стороне, и один perl просто странный. Понял, спасибо! –

+0

Что было странным битом Perl? –

+0

@Grant: Объявление того, что вы хотите быть массивом как скаляр. –

Смежные вопросы