Making Perl-Skript * selbst ausführen * mit Flags

8

Ich bin sehr neu in Perl und habe kürzlich das folgende Problem festgestellt. Mein Perl-Code muss sich alle in einer einzigen Datei befinden (er wird von einem anderen Programm aufgerufen, auf das ich keinen Einfluss habe). Ich möchte nun das Skript mit einem Flag ausführen lassen (z. B. perl myscript.pl -T für den Taint-Modus), obwohl es anfangs ohne das Flag aufgerufen wird. Wie kann ich das tun, d.h. wie setze ich das Flag innerhalb der Perl-Datei?

Eine Idee, die ich hatte, ist, dass die Datei sich selbst startet (nachdem sie ohne Flags aufgerufen wurde), diesmal mit dem Flag -T (indem sie einen Shell-Befehl wie system($^X, "myscript.pl -T", @ARGS); ausgibt). Funktioniert das? Irgendwelche besseren Ideen?

    
mike622867 02.07.2015, 17:08
quelle

1 Antwort

5

Ich denke, Sie sind auf dem richtigen Weg. Sie können die $^{TAINT} Variable und exec anstelle von system :

verwenden %Vor%

Dies funktioniert nicht in allen Fällen. Zum einen werden Sie einige andere Befehlszeilenschalter verlieren, mit denen Ihr Skript anfänglich aufgerufen werden könnte:

%Vor%

Es gibt einige Problemumgehungen für einige von diesen ( use warnings oder add -w wechseln zu Ihrer exec -Anweisung oben, analysieren Sie @INC und %INC , um zu bestimmen, welche -I und -M Switches hinzugefügt wurden, aber Je mehr Sie lernen können, wie genau Ihr Skript aufgerufen wird, desto mehr können Sie herausfinden, um welche Problemumgehungen Sie sich kümmern müssen.

Abhängig von der ... Gruppendynamik, die hier gespielt wird, besteht ein anderer Ansatz darin, eine indirekte Kontrolle des aufrufenden Programms auszuüben. Gehen Sie voran und setzen Sie -T in die Shebang-Zeile, wie @Hunter McMillen und @ThisSuitIsBlackNot vorschlagen, warten Sie auf einen Fehlerbericht und diagnostizieren Sie dann das Problem als "Programm nicht aufgerufen mit -T-Schalter" ...

    
mob 02.07.2015 17:27
quelle

Tags und Links