将所有参数作为Perl中的字符串传递给子例程

前端之家收集整理的这篇文章主要介绍了将所有参数作为Perl中的字符串传递给子例程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写一个函数,它可以获取所有参数并将它们打印为完全符合输入的字符串.

例如,使用以下功能

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 );

猜你在找的Perl相关文章