【问题标题】:How to get the content of an argument to a Perl subroutine如何获取 Perl 子例程的参数内容
【发布时间】:2016-05-11 10:07:53
【问题描述】:

我想要一个 sub 接受一个参数并打印以原始形式提供的参数以及参数的评估。

在这种情况下,参数的评估很容易,这是默认设置!很难以原始形式获取实际输入。

use strict;
use warnings;

sub echo {
    my ($input) = @_;
    # print "5 + 10 =";
    print $input;
    print "\n";
}

echo 5 + 10;

这将输出15

我希望它输出5 + 10 = "15"

【问题讨论】:

  • 除非将 '5 + 10' 作为字符串传递,否则您将无法这样做。 5 + 10 是一个表达式,这个表达式的结果就是传入 sub 的内容;关键是结果不会“记住”它的出现方式。

标签: perl function output subroutine


【解决方案1】:
sub echo {
    my ($expr, $result) = @_;
    print "$expr = $result\n";
}

echo '5 + 10', 5 + 10;

sub echo {
    my ($expr) = @_;
    my $result = eval($expr);
    die $@ if $@;
    print "$expr = $result\n";
}

echo '5 + 10';

【讨论】:

    【解决方案2】:

    您可以做的最好的事情是传递字符串,然后使用eval 对其进行评估。示例:

    use strict;
    use warnings;
    
    sub echo {
        my ($input) = @_;
        print $input, "=";
        print eval $input;
        print "\n";
    }
    
    echo "5 + 10";
    

    但请务必小心使用 eval:不要将您的函数用于用户输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2021-03-09
      • 1970-01-01
      • 2010-11-12
      相关资源
      最近更新 更多