我想插入对字符串的哈希引用,但这种方法不起作用。如何插值$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}
方法调用不会在双引号内插入,因此您最终会得到字符串化引用,后跟->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";
请参阅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";