我正在尝试编写一个函数,它可以获取所有参数并将它们打印为完全符合输入的字符串.
例如,使用以下功能:
test('arg1' => $arg1,'arg2' => $arg2);
我想在格式正确的函数内得到以下字符串,如下所示:
"'arg1' => $arg1,'arg2' => $arg2"
我想这样做,所以我可以打印所有参数,就像输入它们进行调试/测试一样.
解决方法
Perl提供了特殊的
debugging hooks,可以让你看到已编译源文件的原始行.您可以编写一个自定义调试器,每次调用子例程时都会打印原始行.
以下内容允许您指定要匹配的一个或多个子例程;每次调用匹配的子程序时,都会打印相应的行.
package Devel::ShowCalls; our %targets; sub import { my $self = shift; for (@_) { # Prepend 'main::' for names without a package specifier $_ = "main::$_" unless /::/; $targets{$_} = 1; } } package DB; sub DB { ($package,$file,$line) = caller; } sub sub { print ">> $file:$line: ",${ $main::{"_<$file"} }[$line] if $Devel::ShowCalls::targets{$sub}; &$sub; } 1;
sub foo {} sub bar {} sub Baz::qux {} foo(now => time); bar rand; Baz::qux( qw/unicorn pony waffles/ );
跑:
$perl -d:ShowCalls=foo,Baz::qux myscript.pl >> myscript.pl:5: foo(now => time); >> myscript.pl:7: Baz::qux( qw/unicorn pony waffles/ );
foo( bar,baz );