我是Perl的新手,最近遇到了以下问题.我的Perl代码必须全部驻留在一个文件中(它由另一个我无法控制的程序调用).我现在希望使用标志运行脚本(例如,perl myscript.pl -T
对于污点模式),尽管它最初是在没有标志的情况下调用的.我怎么能这样做,即如何从Perl文件中"设置标志"?
我有一个想法是让文件再次启动(在没有标志的情况下调用之后),这次使用-T
标志(通过发出诸如shell的命令system($^X, "myscript.pl -T", @ARGS);
).那会有用吗?有更好的想法吗?
我认为你走在正确的轨道上.您可以使用$^{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开关调用程序"......