6 Stimmen

Wie kann ich bei der Verwendung von Perl's File::Find einen Parameter an die gewünschte Funktion übergeben?

Mögliches Duplikat:
Wie übergebe ich Parameter an die File::Find-Unterroutine, die jede Datei verarbeitet?

Man kann Perl's Datei::Finden Modul wie dieses:

find( \&wanted, @directories);

Wie können wir einen Parameter zur wanted Funktion?

Ich möchte zum Beispiel die Dateien in /tmp Extrahieren einiger Informationen aus jeder Datei, und das Ergebnis sollte in einem anderen Verzeichnis gespeichert werden. Das Ausgabeverzeichnis sollte als Parameter angegeben werden.

10voto

mirod Punkte 15573

Sie verwenden einen Verschluss:

use File::Copy;

my $outdir= "/home/me/saved_from_tmp";
find( sub { copy_to( $outdir, $_); }, '/tmp');

sub copy_to
  { my( $destination_dir, $file)= @_;
    copy $file, "$destination_dir/$file" 
      or die "could not copy '$file' to '$destination_dir/$file': $!";
  }

4voto

brian d foy Punkte 124323

Sie können jede Art von Code-Referenz erstellen, die Sie möchten. Sie müssen nicht unbedingt einen Verweis auf ein benanntes Unterprogramm verwenden. Viele Beispiele für diese Vorgehensweise finden Sie in meinem File::Find::Closures Modul. Ich habe dieses Modul erstellt, um genau diese Frage zu beantworten.

3voto

Sinan Ünür Punkte 114993

Datei::Finden Vertrag legt fest, welche Informationen an &wanted .

Die gesuchte Funktion nimmt keine Argumente entgegen, sondern führt ihre Arbeit über eine Sammlung von Variablen aus.

  • $File::Find::dir ist der Name des aktuellen Verzeichnisses,
  • $_ ist der aktuelle Dateiname in diesem Verzeichnis
  • $File::Find::name ist der vollständige Pfadname zu der Datei.

Wenn Sie zusätzliche Informationen im Rückruf zur Verfügung stellen möchten, können Sie eine Sub-Referenz erstellen, die die gewünschte Sub mit den gewünschten Parametern aufruft .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X