请考虑以下代码段:
use Data::Dumper;
@targetDirsToScan = ("./");
use IO::All;
$io = io(@targetDirsToScan); # Create new directory object
@contents = $io->all(0); # Get all contents of dir
for my $contentry ( @contents ) {
print Dumper($contentry) ."\n";
}
这打印如下:
$VAR1 = bless( \*Symbol::GEN298, 'IO::All::File' );
$VAR1 = bless( \*Symbol::GEN307, 'IO::All::Dir' );
$VAR1 = bless( \*Symbol::GEN20, 'IO::All::File' );
...
我希望我会把相应对象的所有字段都倾倒掉;起初,我认为这是一个参考,所以我认为如果我取消引用变量就会打印字段 - 但我意识到我真的不知道如何取消引用它。
那么 - 如何使用相同类型的@contents
循环打印出for my ...
的所有字段和内容?
答案 0 :(得分:3)
你可以这样做:
use Data::Dumper;
use IO::All;
$io = io('/tmp');
for my $file ( $io->all(0) ) {
print Dumper \%{*$file};
}
但你应该认真考虑这样做是否是一个好主意。面向对象编程的核心原则之一是封装。你不应该关心受祝福物体的内脏 - 你应该只通过它提供的方法与它互动。