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

标签 string perl arguments parameter-passing subroutine

我正在尝试编写一个函数,该函数可以获取所有参数并将它们打印为与输入的字符串完全相同的字符串。

例如使用下面的函数:

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;

跟踪以下程序中函数 fooBaz::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/

相关文章:

python - text_widget.insert(1.0, "\\") 将只显示一个斜线

java - 我正在尝试从字符串中随机抽取一个单词。 java

sql - 如何使用 DBIx::Class 创建不区分大小写的唯一索引

我可以在 C 的主函数中将文本文件作为参数传递吗?

scala - 在默认值中引用 Scala 构造函数参数

java - 平板电脑可以打电话吗? (电话)

javascript - 正则表达式删除大括号中的单词

perl - glob ('foo*' ) 相对于 <foo*>​​ 的比较优势是什么?

java - Perl 脚本在终端中运行,但在从 Java 程序调用时不运行

ruby - Ruby 中命名参数(命名方法参数、关键字参数)的现状如何?