Perl-Skript in PowerShell wie CMD

Unereichbar

Lt. Junior Grade
Registriert
Mai 2010
Beiträge
340
Hallo,

ich habe mal eine Frage. Wir verwenden verschiedene Perl-Skripte die bisher über die Kommandozeile ausgeführt wurden. Dort wurden Rückgaben (print-Kommandos) auch angezeigt und Eingaben korrekt aufgenommen. Nun integriert Windows die PowerShell ja immer tiefer in das System und ich möchte sie auch nutzen. Wenn ich ein Perl-Skript mit der PowerShell aufrufe, öffnet sich ein Kommandofenster und schließt sich wieder (wenn eine Datei die Standardeingabe ist). Gibt es eine Möglichkeit Perl-Skripte in der PowerShell auszuführen exakt so wie in der Kommandozeile?
 
Zuletzt bearbeitet:
Beispielsweise:

#!perl

use 5.016;
use strict;
binmode(STDOUT , ":encoding(cp437)" );

my $was = "fred|barney";

while(<>) {
chomp;
if( /(?:$was){3}/ ) {
print ("Treffer: |$`<$&>$'|\n");
print ("Der String \$_ enthält: \'$_'\n");
}
else {
print("Keine Treffer: |$_|\n");
}
}
 
Unter Windows gibts keinen Shebang, das kann so nicht funktionieren. Was auch immer du in der Konsole benutzt hast, war definitiv nicht die Konsole, sondern wohl eher Cygwin, WSL oder irgend ein anderes Terminal oder Interpreter oder was auch immer.

Unter Windows heißt es perl <dateiname>.
 
Ich habe das Skript was ich oben geschrieben habe folgendermaßen in der PowerShell ausgeführt:

PS X:\YYY> .\test.pl names.dat

und ich hätte gerne die erzeugte Ausgabe in der PowerShell.
 
Wie gesagt: Windows interpretiert den Shebang nicht. Da kann als erste Zeile auch #!das ist ein super toller text stehen, das interessiert die Konsole nicht. Setz den Interpreter manuell vors Skript, dann läuft das auch. In der cmd läuft es auch nicht anders.
 
Wenn man das über Assoziation macht (=> extension .PL => C:\perl\bin\perl %1 %*) dann wird beim Ausführen im Command Interpreter der Prozeß inline gestartet (man sieht das schwarze Fenster von Perl nicht, weil es sich nicht vom schwarzen Fenster von cmd.exe abhebt).

Startet man hingegen von der PowerShell aus, dann wird das erstmal extern gestartet und die PS sammelt die Ausgabe ein. Dann sieht man das schwarze Fenster, nicht von cmd.exe, sondern von perl.exe .

- Man kann start-process nehmen und den WindowMode auf Hidden setzen.

- Man kann statt perl.exe perlw.exe nehmen (glaub ich war bei denen die GUI-Executable). Aber nicht sicher, wo dann eventuelle Ausgaben landen.

- Und man kann, wie bereits angedeutet, perl.exe <pfad zur Perldatei> verwenden.

- Die Shebang interessiert nicht, stört aber auch nicht. Kann man da lassen, sollte man für Portabilität auch, aber unter Windows wird sie nicht genutzt.
 
Yuuri schrieb:
Wie gesagt: Windows interpretiert den Shebang nicht. Da kann als erste Zeile auch #!das ist ein super toller text stehen, das interessiert die Konsole nicht. Setz den Interpreter manuell vors Skript, dann läuft das auch. In der cmd läuft es auch nicht anders.


Super!!!! Vielen Dank, so klappt es.
 
Zurück
Oben