忽略参数perl中存储的字符串中的空格

忽略参数perl中存储的字符串中的空格,perl,Perl,我正在尝试执行一个.VB脚本以及一些其他参数 我正在呼叫系统(“$cmd”),其中 my $cmd = "Report.exe $app_env $rpt_Dir $eff_date"; 及 我遇到的问题是(我认为)脚本将“Target Report”之间的空格视为两个参数 我没有用“”包围路径并将其作为参数传递,而不是将其保存到变量的原因是路径根据日期而变化 更改.VB脚本中的代码并不是第一选择。您可以简单地将$rpt\u Dir变量括在单引号中: my $cmd = "Report.exe

我正在尝试执行一个
.VB
脚本以及一些其他参数

我正在呼叫
系统(“$cmd”)
,其中

my $cmd = "Report.exe $app_env $rpt_Dir $eff_date";

我遇到的问题是(我认为)脚本将
“Target Report”
之间的空格视为两个参数

我没有用“”包围路径并将其作为参数传递,而不是将其保存到变量的原因是路径根据日期而变化


更改
.VB
脚本中的代码并不是第一选择。

您可以简单地将
$rpt\u Dir
变量括在单引号中:

my $cmd = "Report.exe $app_env '$rpt_Dir' $eff_date";

它将被视为一个参数

您可以将一个参数数组传递给。如果你这样做,你就不会被报价插值绊倒

system  ( "Report.exe", $app_env, $rpt_Dir, $eff_date );

在Windows上,
system
调用使用
cmd.exe
来处理命令,因此在包含空格的任何参数周围都需要双引号

像这样设置你的
$cmd

my $cmd = qq{Report.exe $app_env "$rpt_Dir" $eff_date};
qq{…}结构与普通双引号相同,但它允许您选择自己的分隔符,这样您就不必转义任何嵌入的双引号

然后你就可以写了

system($cmd);

在一个单独的标量变量周围加引号是错误的,我不太确定我是否正确理解它,但是说:“在Windows上,只有
系统程序列表
语法才能可靠地避免使用shell;
系统列表
,即使有多个元素,如果第一次生成失败,也会返回shell。”
system($cmd);