5

我想插入对字符串的哈希引用,但这种方法不起作用。如何插值$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} 
4

2 回答 2

9

方法调用不会在双引号内插入,因此您最终会得到字符串化引用,后跟->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";
于 2013-04-25T15:59:03.010 回答
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";
于 2019-05-09T06:16:42.930 回答