制作Perl脚本*使用标志运行*

mik*_*867 8 perl flags

我是Perl的新手,最近遇到了以下问题.我的Perl代码必须全部驻留在一个文件中(它由另一个我无法控制的程序调用).我现在希望使用标志运行脚本(例如,perl myscript.pl -T对于污点模式),尽管它最初是在没有标志的情况下调用的.我怎么能这样做,即如何从Perl文件中"设置标志"?

我有一个想法是让文件再次启动(在没有标志的情况下调用之后),这次使用-T标志(通过发出诸如shell的命令system($^X, "myscript.pl -T", @ARGS);).那会有用吗?有更好的想法吗?

mob*_*mob 5

我认为你走在正确的轨道上.您可以使用$^{TAINT}变量,而exec不是system:

exec($^X, $0, '-T', @ARGV) if $^{TAINT} < 1;
Run Code Online (Sandbox Code Playgroud)

这并不适用于所有情况.首先,您将丢失一些其他命令行开关,您的脚本最初可能会被调用:

perl -I/path/to/some/more/libs -w -MNecessary::Module myscript.pl ...
Run Code Online (Sandbox Code Playgroud)

其中一些解决方法有一些解决方法(use warnings或者在上面添加-w切换到exec上面的语句,分析@INC%INC确定添加了什么-I-M交换机),但是你可以越多地了解脚本的确切调用方式,就越能弄明白你的解决方法是什么需要担心.


根据这里的......群体动态,另一种方法是对呼叫程序进行一些间接控制.继续将-T@Bunter McMillen和@ThisSuitIsBlackNot建议放在shebang线上,等待错误报告,然后将问题诊断为"未使用-T开关调用程序"......