当我使用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];
如何逃避','签署?
答案 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'`