为什么以下代码段可以正常工作?使用这个可能有什么邪恶?但严重的是,有没有任何理由,${}中的代码会被评估,然后用作标量参考?
use strict; no strict 'refs'; our $message = "Hello world!"; print "${ lc 'MESSAGE' }\n";
解决方法
没关系,unless you use symbolic references.假设以下代码:
my %messages = (hello => "Hello world!",bye => "Bye-bye,world!"); sub get_message_ref { return \$messages{$_[0]} }; # returns scalarref print "${ get_message_ref('bye') }\n";
同意,scalarrefs的用处并不明显,但它对于arrayrefs非常有用.
print "keys: @{[keys %messages]}\n";