name("NODE_HOST") . "\n"; 但不是这个: print "Propert-6ren">
gpt4 book ai didi

perl - 在 Perl 中打印函数的返回值

转载 作者:行者123 更新时间:2023-12-01 04:55:21 24 4
gpt4 key购买 nike

为什么下面的工作?

    print "Property is :" . $property->name("NODE_HOST") . "\n";

但不是这个:

    print "Property is : $property->$name("NODE_HOST")\n";

编译器提示第二个片段:

    Bareword found where operator expected at ./testProperties.pl line 11, near ""Property is : $property->$name("NODE_HOST"
(Missing operator before NODE_HOST?)

Perl 在打印字符串和变量的组合时通常很容易走捷径。 $property->name 是对 Property 类的调用,它返回传入的名称的值:

    sub name {
my ( $self, $propertyName ) = @_;
my $hash_ref = $self->{_hashref};
my %properties = %$hash_ref;
my $property = $properties{$propertyName};
return $property;
}

最佳答案

因为

print "Property is :" . $property->name("NODE_HOST") . "\n";

被正确引用而:

print "Property is : $property->$name("NODE_HOST")\n";

不是。这意味着:

print "Property is : $property->$name("
NODE_HOST
")\n";

这是一个荒谬的陈述。

当您使用 " 开始引用时,任何跟随的 " 都表示引用结束。您不能指望 perl 理解非转义双引号不是作为引号的结尾。

你的意思可能是

print "Property is : $property->$name(\"NODE_HOST\")\n";

但这不会如您所愿。

我假设尝试在此处进行插值的原因是保持开盘价和收盘价很尴尬。您有一些选择:

printf "Property is: %s\n", $property->name("NODE_HOST");

$name = $property->name("NODE_HOST");
print "Property is: $name\n";

use v5.10; # to enable say()
say "Property is: ", $property->name("NODE_HOST");

或者如果您有要打印的语句列表,将它们存储在数组中然后打印它们可能是最简单的方法,例如:

push @props, "Property#1 is: " . $property->name("NODE_HOST");
push @props, "Property#2 is: " . $property->name("FOO");
...
say for @props; # print them all

关于perl - 在 Perl 中打印函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9422988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com