Perl,将变量设置为整个命令行'string'而不是参数

时间:2012-12-11 17:44:31

标签: perl command-line-arguments argv

我需要允许用户在运行我的perl脚本时输入任何内容,因为我的脚本会以不同的增量将所有数据发送到另一个非自定义脚本。

理论上,我希望这可能发生:

perlscript "this is" -t stuff\n4^./q%

然后,在perlscript中,有:

print "Full: $full_command";

导致:

Full: "this is" -t stuff\n4^./q%

这有什么意义吗?我尝试过的任何东西都没有用argv之类的东西来完成我的目标。

感谢您的帮助, 添

3 个答案:

答案 0 :(得分:4)

shell执行与

等效的操作
exec('perlscript', 'this is', '-t', 'stuff'.chr(0x0A).'4&^./q%');

perl无法从中生成原始shell命令。如果你想要Perl接收

"this is" -t stuff\n4^./q%

你需要告诉shell使用类似

的东西
perlscript '"this is" -t stuff\n4^./q%'

(好吧,至少对于Borne shell或衍生物来说。)

答案 1 :(得分:2)

不幸的是,你的shell很可能在它们进入Perl脚本之前操纵你的参数。在您的特定示例中,类似bash的shell会删除引号,将\n视为n,并在到达&后停止处理该行。在Unixy系统中,最好的选择可能是将所有参数包装在单引号中

perlscript '"this is" -t stuff\n4&^./q%'

答案 2 :(得分:-1)

假设您正确引用了您的操作系统,如上所述,或许以下内容对您有用:

print join(" ", map { / / ? "\"$_\"" : $_ } @ARGV);

请注意,运行perl时,需要使用“ - ”标记将发往perl本身的参数与程序的参数分开。例如:

perl -- -t 'stuff...'

这将防止perl本身错误地使用的参数。