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};
}

しかし、これを行うことが良い考えかどうかを真剣に検討する必要があります。オブジェクト指向プログラミングの中心的な原則の 1 つは、カプセル化です。祝福されたオブジェクトの内臓を気にする必要はありません。オブジェクトが提供するメソッドを介してのみ対話する必要があります。

于 2014-07-12T21:21:09.223 に答える