如何逃避','在命令行上签名?

时间:2016-04-08 06:50:57

标签: perl

当我使用perl脚本(source)时:

`perl -d:DebugHooks::DbInteract='s;e [\@DB::stack\,\@DB::goto_frames]' -e '1'`

该模块有两个参数:

s;e [\@DB::goto_frames\
\@DB::stack];

但我想只得到一个:

s;e [\@DB::goto_frames,\@DB::stack];

如何逃避','签署?

3 个答案:

答案 0 :(得分:2)

必须是你的模块在逗号上拆分,而不是perl或shell。bash下运行以下内容,我在{{只得到一个参数1}}:

@ARGV

修改

我的立场得到了纠正。它被逗号分隔为$ perl -w -E 'say join "\n", ("---", @ARGV, "---")' 's;e [\@DB::stack\,\@DB::goto_frames]' --- s;e [\@DB::stack\,\@DB::goto_frames] --- ,大概是允许将多个参数传递给模块,正如我在perl创建一个包含以下内容的模块所证明的那样:

./Devel/DbInteract.pm

并运行命令:

package Devel::DbInteract;

use strict;
use warnings;
use 5.010;

sub import {
  say 'Received ' . scalar @_ . ' params:';
  say join "\n", @_;
} 

1;

根据提问者答案中的相关来源判断,似乎没有任何关于逃避价值的规定或任何其他方法来防止这种分裂。那么,您的选择是通过{{1}将params重新组合在一起或者向$ PERL5LIB=. perl -d:DbInteract='s;e [\@DB::stack,\@DB::goto_frames]' -e '' Received 3 params: Devel::DbInteract s;e [\@DB::stack \@DB::goto_frames] 源提交补丁以增加转义余量来解决问题。

答案 1 :(得分:0)

Perl并不关心转义:https://github.com/Perl/perl5/blob/blead/perl.c#L3240-L3264

-d标志只是将下一行作为零行号添加到脚本中:

use Devel::DbInteract split(/,/,q{s;e [\@DB::stack\,\@DB::goto_frames]});

答案 2 :(得分:0)

有些人建议我采用简单的方法而不是修补perl。只是在我的案例中使用=>

`perl -d:DebugHooks::DbInteract='s;e [\@DB::stack => \@DB::goto_frames]' -e '1'`