Ich lerne Perl und schrieb ein kleines Perl-Skript-Dateien zu öffnen und entfernen Sie die Kommentare
# Will remove this comment
my $name = ""; # Will not remove this comment
#!/usr/bin/perl -w
< - wird nicht entfernen Dieser spezielle Kommentar
Der Name der zu bearbeitenden Dateien wird als Argumente über das Terminal
übergebendie "You need to a give atleast one file-name as an arguement\n" unless (@ARGV);
foreach (@ARGV) {
$^I = "";
(-w && open FILE, $_) || die "Oops: $!";
/^\s*#[^!]/ || print while(<>);
close FILE;
print "Done! Please see file: $_\n";
}
Nun, wenn ich lief es über Terminal: perl removeComments file1.pl file2.pl file3.pl
bekam ich die Ausgabe: Done! Please see file:
Dieses Skript arbeitet genau so, wie ich erwarte aber
Problem 1: Warum hat $_
den Namen der Datei nicht gedruckt?
Problem 2: Warum wird Done! Please see file:
nur einmal gedruckt, da die Schleife 3 Mal ausgeführt wird?
Wie würden Sie dieses Skript in so wenigen Zeilen wie möglich schreiben?
Bitte kommentieren Sie auch meinen Code, wenn Sie Zeit haben.
Vielen Dank.
Hinweis: '/ stuff /;' ist wirklich '$ _ = ~/stuff /;'. – cHao
Es gibt wirklich keinen Grund, '<>' hier zu verwenden, wenn Sie explizit ein Datei-Handle geöffnet haben (was auch mit der 3-Arg-Methode gemacht werden sollte). – squiguy
Der möglicherweise kürzeste Weg, um Ihr Programm zu schreiben: 'perl -i -ne '/^\ s * # [^!]/|| print'' außer den fertiggestellten Nachrichten. – TLP