是Perl的新手,需要帮助解决一个小问题
情况:
问题:
我已编写代码来从这些电子邮件地址创建参数列表,但在运行exec()时遇到问题。
注意:如果我将带有转义的“@”字符的硬编码字符串作为命令args传递给exec(),它就能完美运行。
子创建cmd args地图
sub create_cmd_args {
my($self, $msginfo) = @_;
my @gd_args_msg = ('--op1');
my $mf = $msginfo->sender_smtp;
$mf =~ s/@/\\@/ig; ## Tried escaping @, incorrect results.
push @gd_args_msg, '-f="'.$mf.'"';
for my $r (@{$msginfo->per_recip_data}) {
my $recip = $r->recip_addr_smtp;
$recip =~ s/@/\\@/ig; ## Tried escaping @, incorrect results.
push @gd_args_msg, '-r="'.($recip).'"';
}
return @gd_args_msg;
}
Sub使用此args映射来执行程序
sub check {
my($self, $msginfo) = @_;
my $cmd = $g_command;
my @cmd_args = create_cmd_args($self, $msginfo);
exec($cmd, @cmd_args); ### ******* fails here
}
示例运行:
INPUT:
sender_smtp: <ashish@isthisreal.com>
receiver_smtp: <areyouarealperson@somedomain.com>
有人可以指导我这里有什么问题吗?
答案 0 :(得分:4)
作为shell中命令的参数,
-f="<ashish@isthisreal.com>"
导致字符串
-f=<ashish@isthisreal.com>
传递给程序。你的程序通过了
-f="<ashish\@isthisreal.com>"
到该计划。问题不在于@
;问题是您要添加的"
和\
。
my $mf = $msginfo->sender_smtp;
push @gd_args_msg, "-f=$mf"; # Assuming $mf is <ashish@isthisreal.com>
答案 1 :(得分:0)
如果查看Trying to convert Perl to PHP上的帖子以及调用命令行的md5sum实现中的代码,您将看到一种方法,可以避免担心转义字符。