如何通过一个方法返回到一个字符串参考插散元素?(How to interpolate hash el

2019-09-01 03:27发布

我想插散列引用字符串,但这种方法是行不通的。 如何一个插值$self->Test->{text}

# $self->Test->{text} contains "test 123 ok"
print "Value is: $self->Test->{text} \n";   # but not working

输出:

Test=HASH(0x2948498)->Test->{text} 

Answer 1:

方法调用将不会插双引号里面,所以你最终的字符串化的参考,然后->Test->{text}

最简单的方法来做到这一点是需要的,事实的优点print需要的参数列表:

print "Value is: ", $self->Test->{text}, "\n";

你也可以使用串联:

print "Value is: " . $self->Test->{text} . "\n";

你也可以使用经过检验而可靠printf

printf "Value is %s\n", $self->Test->{text};

或者你可以用这个愚蠢的伎俩:

print "Value is: @{ [ $self->Test->{text} ] }\n";


Answer 2:

见https://perldoc.perl.org/perlfaq4.html#How-do-I-expand-function-calls-in-a-string%3F

对于你的榜样最匹配的形式是在我看来:

print "Value is: ${ \$self->Test->{text} } \n";

现在的问题是插值的附加价值? 它应该是更快然后拼接,而是基于http://perl.apache.org/docs/1.0/guide/performance.html#Interpolation__Concatenation_or_List的差别非常小,最快捷的方式,在这个特殊的打印情况下,是:

print "Value is: ", $self->Test->{text}, " \n";


文章来源: How to interpolate hash element via reference returned by a method into a string?