tjw*_*992 3 string perl arguments parameter-passing subroutine
我正在尝试编写一个函数,它可以获取所有参数并将它们打印为完全符合输入的字符串.
例如,使用以下功能:
test('arg1' => $arg1, 'arg2' => $arg2);
Run Code Online (Sandbox Code Playgroud)
我想获得该函数内的以下字符串格式化EXACTLY所见如下:
"'arg1' => $arg1, 'arg2' => $arg2"
Run Code Online (Sandbox Code Playgroud)
我想这样做,所以我可以打印所有参数,就像输入它们进行调试/测试一样.
Perl提供了特殊的调试钩子,可以让您查看已编译源文件的原始行.您可以编写一个自定义调试器,每次调用子例程时都会打印原始行.
以下内容允许您指定要匹配的一个或多个子例程; 每次调用匹配的子程序时,都会打印相应的行.
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;
Run Code Online (Sandbox Code Playgroud)
跟踪函数的调用foo以及Baz::qux以下程序:
sub foo {}
sub bar {}
sub Baz::qux {}
foo(now => time);
bar rand;
Baz::qux( qw/unicorn pony waffles/ );
Run Code Online (Sandbox Code Playgroud)
跑:
$ perl -d:ShowCalls=foo,Baz::qux myscript.pl
>> myscript.pl:5: foo(now => time);
>> myscript.pl:7: Baz::qux( qw/unicorn pony waffles/ );
Run Code Online (Sandbox Code Playgroud)
请注意,这只会打印调用的第一行,因此它不适用于类似的调用
foo( bar,
baz );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |