我正在尝试编写一个函数,该函数可以获取所有参数并将它们打印为与输入的字符串完全相同的字符串。
例如使用下面的函数:
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;
跟踪以下程序中函数 foo
和 Baz::qux
的调用:
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 );
关于string - 在 Perl 中将所有参数作为字符串传递给子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361651/