Ich erhielt ein Perl-Skript, das derzeit eine Liste von Verzeichnissen aus einer Textdatei liest und speichert sie in einem Zeichenfolge-Vektor. Ich möchte es so ändern, dass es die Namen aller Verzeichnisse im aktuellen Ordner liest und sie im Vektor speichert. Auf diese Weise muss der Benutzer die Eingabedatei nicht jedes Mal ändern, wenn sich die Liste der Verzeichnisse im aktuellen Ordner ändert.Speichern Sie die Liste der Verzeichnisse in einem Array
Ich habe keine Kenntnisse von Perl, abgesehen davon, dass es aussieht wie Array-Indizes in Perl von 0 (wie in Python). Ich habe Grundkenntnisse in bash und Python, aber ich möchte das Skript in Python nicht von Grund auf neu schreiben. Es ist ein langes, komplexes Skript und ich bin mir nicht sicher, ob ich es in Python umschreiben könnte. Kannst du mir helfen? Hier ist der Teil des Skripts, die zur Zeit ist das Lesen der Textdatei:
#!/usr/bin/perl
use Cwd;
.
.
.
open FILES, "<files.txt" or die; # open input file
<FILES> or die; # skip a comment
my $nof = <FILES> or die; # number of directories
<FILES> or die; # skip a comment
my @massflow; # read directories
for (my $i = 0; $i < $nof; $i++){
chomp($massflow[$i] = <FILES>);
}
.
.
.
close(FILES);
PS Ich denke, das Skript ist ziemlich selbsterklärend, aber nur um sicher zu sein, öffnet sich dieses Stück eine Textdatei namens „files.txt ", überspringt eine Zeile, liest die Anzahl der Verzeichnisse, überspringt eine andere Zeile und liest, einen Namen für jede Zeile, die Namen aller Verzeichnisse im aktuellen Ordner, wie in" files.txt "geschrieben.
EDIT schrieb ich dieses Skript folgende @Sobrique Vorschlag, aber es enthält auch Dateien, nicht nur dirs:
#!/usr/bin/perl
use Cwd;
my @flow = glob ("*");
my $arrSize = @flow;
print $arrSize;
for (my $i = 0; $i < $arrSize; $i++){
print $flow[$i], "\n";
}
Es sieht aus wie ein sehr alter Perl-Skript, mit, was heutzutage als schlechte Gewohnheiten kombiniert mit Baby-perl. (Füge 'use strict;' und 'use warnies;' zu Beginn hinzu. Der open-Befehl ist nicht so wie wir es heute machen. (Siehe perldoc -f open) Die Schleife zum Lesen der Datei ist Baby perl sollte wirklich eine while-Schleife verwenden – edehont
Ihr Code, um den Inhalt von '@ flow' zu drucken, ist unnötigerweise ausführlich und kann durch die einzige Anweisung ersetzt werden:' print '$ _ \ n "für @flow;' oder (in Perl 5.10 +) 'sagen $ _ für @flow;' –
@DaveCross Oder einfach 'sagen für @ flow' –