gpt4 book ai didi

perl - 使用 perl 的 qx{}/ `...` 运算符和参数列表

转载 作者:行者123 更新时间:2023-12-04 17:14:38 25 4
gpt4 key购买 nike

system , exec , open '|-' , open2等都允许我指定要作为参数列表运行的命令,这些参数将直接传递给 execvp而不是通过外壳运行。

即使perl如果它看起来像一个“简单”命令,那么它足够聪明,可以直接运行它,这样就省去了正确地对参数进行外壳转义以及它所带来的所有令人讨厌的陷阱的麻烦。

例子:

open my $out, '|-', $prog, @args;
system $prog, @args;
exec $prog, @args;

代替
open my $out, "|$prog @args";
system "$prog @args";
exec "$prog @args";
qx// 有这样的等价物吗?运算符(operator)?或者你必须总是用手做,例如。
sub slurpcmd {
open my $h, '-|', @_ or die "open $_[0]|: $!";
local $/ unless wantarray;
<$h>
}

最佳答案

事实证明(不幸的是)这不是我的疏忽——唯一的解决方案是使用 open -|或使用其他答案中列出的外部模块之一。

反引号 implementation (无论是由 qx/.../`...` 还是 readpipe 调用)都被硬连线以接受单个字符串参数:

PP(pp_backtick)
{
dSP; dTARGET;
PerlIO *fp;
const char * const tmps = POPpconstx;
const U8 gimme = GIMME_V;
const char *mode = "r";

TAINT_PROPER("``");
if (PL_op->op_private & OPpOPEN_IN_RAW)
mode = "rb";
else if (PL_op->op_private & OPpOPEN_IN_CRLF)
mode = "rt";
fp = PerlProc_popen(tmps, mode);
...

注意 POPpconstx从堆栈中弹出一个参数并使用 PerlProc_popen而不是 PerlProc_popen_list .

关于perl - 使用 perl 的 qx{}/ `...` 运算符和参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54487856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com