Perl 执行参数包含“@”的程序
Perl to exec a program with arguments containing "@"
我是 Perl 的新手,需要帮助解决一个小问题
Situation:
- 我必须通过 perl 执行命令行程序。
- 此命令行的参数是电子邮件地址
- 这些电子邮件地址是通过另一个模块传递给我的。
Problem:
我已经编写了从这些电子邮件地址创建参数列表的代码,但在 运行ning exec() 中遇到问题。
注意:如果我将带有转义“@”字符的硬编码字符串作为命令参数传递给 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;
}
使用此 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>
有人可以指导我这里有什么问题吗?
作为 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>
如果您查看 Trying to convert Perl to PHP 中的 post 和调用命令行的 md5sum 实现中的代码,您会发现一种方法可以让您不必担心转义字符。
我是 Perl 的新手,需要帮助解决一个小问题
Situation:
- 我必须通过 perl 执行命令行程序。
- 此命令行的参数是电子邮件地址
- 这些电子邮件地址是通过另一个模块传递给我的。
Problem:
我已经编写了从这些电子邮件地址创建参数列表的代码,但在 运行ning exec() 中遇到问题。
注意:如果我将带有转义“@”字符的硬编码字符串作为命令参数传递给 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; }
使用此 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>
有人可以指导我这里有什么问题吗?
作为 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>
如果您查看 Trying to convert Perl to PHP 中的 post 和调用命令行的 md5sum 实现中的代码,您会发现一种方法可以让您不必担心转义字符。