#!/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' );
如何理解这些信息?我们从输出中得到什么?
#!/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' );
如何理解这些信息?我们从输出中得到什么?
Data::Dumper 需要获取对字符串的引用,而无需在当前范围内创建新变量,这大概就是它的做法。从中间向外工作,我们有my $o = 'test'
声明$o
,设置它的值'test'
并返回$o
。在这种情况下,do{}
块提供了my
绑定存在的范围,当块退出$o
时不再存在但它引用的值继续存在,这很好,因为\
在 do 块的开头引用了它的返回值。然后对字符串的引用'test'
带有'Tk'
.
通常 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'
};