2017-04-07 1 views
0

je le code suivant:perl passant des paramètres sur les fenêtres

$op = shift or die "Usage: rename expr [files]\n"; 
chomp(@ARGV = <STDIN>) unless @ARGV; 
print "$op"; 

for (@ARGV) 
{ 
    print "$_"; 
    $was = $_; 
    eval $op; 
    die [email protected] if [email protected]; 
    rename ($was, $_) unless $was eq $_; 
} 

Il produit le résultat attendu sur une machine Linux, à savoir quand je lance

perl massrenamer.pl 's/\.txt/\.txtla/' *.txt 

j'obtenir des résultats appropriés. J'essaie d'exécuter la même chose sur une machine Windows, avec perl de fraises installés comme

perl massrenamer.pl 's/\.txt/\.txtla/' *.txt 

et

perl massrenamer.pl "s/\.txt/\.txtla/" *.txt 

et

perl massrenamer.pl 's/\.txt/\.txtla/' "*.txt" 

mais je reçois aucun résultat. Quelqu'un pourrait-il aider?

Répondre

2

l'expansion wilcard se fait par le shell, mais pas lorsque le paramètre est enfermé entre guillemets, sur les fenêtres pour les scripts Perl port il y a un module Win32 :: AutoGlob see also this SO question

Une solution rapide: remplacer (@ARGV) par (glob "@ARGV")

$op = shift or die "Usage: rename expr [files]\n"; 
chomp(@ARGV = <STDIN>) unless @ARGV; 
print "$op"; 

for (glob "@ARGV") 
{ 
    print "$_"; 
    $was = $_; 
    eval $op; 
    die [email protected] if [email protected]; 
    rename ($was, $_) unless $was eq $_; 
}