当我在perl脚本中执行时(源代码):
`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];
如何逃离","标志?
必须是您的模块在逗号上进行拆分,而不是 在perl
或shellbash
下运行以下操作,我在@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;
并运行命令:
$ PERL5LIB=. perl -d:DbInteract='s;e [@DB::stack,@DB::goto_frames]' -e ''
Received 3 params:
Devel::DbInteract
s;e [@DB::stack
@DB::goto_frames]
根据询问者答案中链接的来源判断,似乎没有任何转义值的规定或任何其他方式来防止这种分裂。那么,您的选择是通过join
将参数重新组合在一起来解决它,或者向perl
源提交一个补丁来添加转义余量。
Perl不关心转义:https://github.com/Perl/perl5/blob/blead/perl.c#L3240-L3264
-d
标志只是将next作为零行号添加到脚本中:
use Devel::DbInteract split(/,/,q{s;e [@DB::stack,@DB::goto_frames]});
有些人建议我使用比修补perl更简单的方法。在我的情况下只使用=>
:
`perl -d:DebugHooks::DbInteract='s;e [@DB::stack => @DB::goto_frames]' -e '1'`