簡體   English   中英

查找文件並在Perl腳本中的第一個匹配項之后返回

[英]Find a file and return after the first match in a perl script

我正在使用來自perl的查找。 它可以工作,但是我想在找到第一個匹配項后從想要的子例程中返回(退出),我想停止查找。 我把退貨放了,但是沒用。 這是我的代碼:

find(\&wanted, $dir);

sub wanted {
    print "Found it $File::Find::dir/$_\n" if /$file/i; 
        $found_file = "$File::Find::dir/$_";  
        return "$File::Find::dir/$_";
}

print $found_file;

$ dir是我要搜索的目錄,$ file是我需要的文件。

我應該在哪里將returi放在子通緝中。 我是perl的新手,感謝您的幫助。 謝謝。

File::Find是一個古怪的模塊。 它幾乎需要您在wanted部分中編寫整個程序。 如果您不想這樣做,通常需要使用某種范圍錯誤的變量,這會使事情看起來很丑陋。 另外,它使用一個單獨的子例程,使代碼難以遵循。

問題在於File::Find不是面向對象的。 如果是這樣,則可以使用一種方法在循環中獲取文件,並且在獲取所需文件時可以退出循環。

幸運的是,已經有一個File :: Find :: Object ,它是File::Find面向對象版本。

sub find_file {
    my @directories = @_;
    my $dir_tree = File::Find::Object->new( @directories );

    while ( my $file = $dir_tree->next ) {
      next unless ... # Code used to determine if file is what you want
      return $file
    }
    return;   #Nothing found
}

界面干凈,易於理解。 這就是File::Find應該如何工作。 我不知道為什么它不是標准的分發模塊。


File::Find的主要問題是(從Perl 3.x開始)它已經很舊了,並且從未真正打算用作模塊 它可以與Perl發行版附帶的find2perl程序一起使用。 想看到丑陋和可怕的東西嗎? 通過find2perl運行查找查詢並查看結果。 這就是舊的Perl代碼所使用的樣子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM