sto imparando Perl e ho scritto un piccolo script per aprire i file perl e rimuovere i commenti
# Will remove this comment
my $name = ""; # Will not remove this comment
#!/usr/bin/perl -w
< - wont rimuovere questo commento speciale
Il nome dei file da modificare vengono passati come argomenti tramite il terminale
die "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";
}
Ora, quando ho eseguito tramite Terminal: perl removeComments file1.pl file2.pl file3.pl
ho avuto l'output: Done! Please see file:
Questo script funziona esattamente come mi aspetto, ma
Problema 1: Perché $_
non ha stampato il nome del file?
Problema 2: Poiché il ciclo viene eseguito per 3 volte, perché Done! Please see file:
è stato stampato una sola volta?
Come scrivere questo script nel minor numero possibile di righe?
Si prega di commentare anche il mio codice, se avete tempo.
Grazie.
Suggerimento: '/ stuff /;' è veramente '$ _ = ~/stuff /;'. – cHao
Non c'è davvero alcun motivo per usare '<>' qui se hai aperto esplicitamente un handle di file (che dovrebbe essere fatto usando anche il modo 3-arg). – squiguy
Il modo forse più breve per scrivere il tuo programma: 'perl -i -ne '/^\ s * # [^!]/|| print'' tranne che per i messaggi completati. – TLP