1
#!/usr/bin/perl
use Data::Dumper;
use Tk;
use strict;
use warnings;
my $name='test';
my $s_ref=\$name;
bless $s_ref, 'Tk';
print Dumper \$s_ref;

输出信息为:

$VAR1 = \bless( do{\(my $o = 'test')}, 'Tk' );

如何理解这些信息?我们从输出中得到什么?

4

2 回答 2

2

Data::Dumper 需要获取对字符串的引用,而无需在当前范围内创建新变量,这大概就是它的做法。从中间向外工作,我们有my $o = 'test'声明$o,设置它的值'test'并返回$o。在这种情况下,do{}块提供了my绑定存在的范围,当块退出$o时不再存在但它引用的值继续存在,这很好,因为\在 do 块的开头引用了它的返回值。然后对字符串的引用'test'带有'Tk'.

于 2013-04-19T09:51:49.367 回答
0

通常 Data::Dumper 用于检查 Hash 或 Array 等变量的内容。在您的情况下,您正在尝试转储类对象引用。

例如看下面的代码和输出,$VAR1 显示了 $var 的内容,它是关联数组(HASH)

代码:

#!/usr/bin/perl
use Data::Dumper;


my $var = {a => 'One', b => 'Two', c => [1,2,3]};

print Dumper $var;

输出:

$VAR1 = {
  'c' => [
           1,
           2,
           3
         ],
  'a' => 'One',
  'b' => 'Two'
};
于 2013-04-19T09:54:54.460 回答