1

考虑这个片段:

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 ...循环打印出 的所有字段和内容?

4

1 回答 1

3

你可以这样做:

use Data::Dumper;
use IO::All;

$io = io('/tmp');
for my $file ( $io->all(0) ) {
   print Dumper \%{*$file};
}

但是您应该认真考虑这样做是否是一个好主意。面向对象编程的核心原则之一是封装。你不应该关心一个受祝福的对象的胆量——你应该只通过它提供的方法与它交互。

于 2014-07-12T21:21:09.223 回答