поиск файла на сетевом диске с использованием recursion.prblm: такого файла или каталога нет после 2 шагов - PullRequest
0 голосов
/ 12 июля 2011

У меня есть сетевая папка, в которой я должен найти файл и получить полный путь к этому конкретному файлу. я пытался реализовать с помощью рекурсии.

use dirsearch;
use Cwd;
$dir = "\\\\moon\\builds502\\TEST\\Q1105ASRAWBF100044";
$filename="oncrpc_prot.c";
$path=dirsearch->search($dir,$filename);
print "path of $filename :: $path"; 

это Perl-скрипт, который в свою очередь использует модуль, который выглядит так

package dirsearch;
sub search{
    $arg0=shift;
    $dir=shift;
    $filename=shift;
    print $dir,"\n";
    print $filename,"\n";
    #chdir($dir) or die $!;
    chomp($dir);
    chomp($filename);
    opendir(DIR, $dir) or die $!;
    while (my $file = readdir(DIR)) {
        #Using a regular expression to ignore files beginning with a period
        unless ($file =~ m/^\./){
            if(-d "$dir\\$file"){
                #closedir(DIR);
                $dir=$dir.'\\'.$file;
                print $dir,"\n";
                search($dir,$filename);
            }
            else{
                if($file =~ /$filename/){
                    $path=$dir."\\".$file;
                    #print $path,"\n";
                    return $path;
                }
            }
        }
    }
    $str="file not found";
    return $str;
    #closedir(DIR);
}
1;

сетевой путь состоит из системы папок и подпапок. После 2-х запусков он достигает состояния «Такой файл или каталог не найден в diresearch.pm в строке 11», хотя каталог существует. вывод выглядит так

\\moon\builds502\TEST\Q1105ASRAWBF100044
oncrpc_prot.c
\\moon\builds502\TEST\Q1105ASRAWBF100044\Crm
oncrpc_prot.c

No such file or directory at dirsearch.pm line 11.

кто-нибудь, пожалуйста, помогите мне узнать мою ошибку или в любом случае выполнить мое требование

1 Ответ

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

Вместо вызова search($dir,$filename); в пакете dirsearch вы должны вызвать его как:

$arg0->search($dir,$filename);

В sub search вы делаете:

$arg0=shift;
$dir=shift;
$filename=shift;

затем во втором ходу вы назначаете:

$arg0 to $dir
$dir to $filename
and then $filename is undef

, чтобы вы получили No such file or directory ...

И вы действительно должны поставить эти две строки в начале:

use strict;
use warnings;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...