【问题标题】:Printing the return of IO::All with Data::Dumper?使用 Data::Dumper 打印 IO::All 的返回?
【发布时间】:2014-09-03 05:29:39
【问题描述】:

考虑一下这个sn-p:

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' );
...

我希望我会转储各个对象的所有字段;起初,我认为这是一个引用,所以我认为如果我取消引用变量,字段会被打印出来 - 但我意识到我真的不知道如何取消引用它。

那么 - 我如何使用相同类型的 for my ... 循环打印出 @contents 的所有字段和内容?

【问题讨论】:

    标签: perl data-dumper


    【解决方案1】:

    你可以这样做:

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

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

    【讨论】:

    • 非常感谢@tobyink!也感谢您的警告:我认为 Dumper 会同时显示“方法”和“属性”;我只是想看看首先出现了哪些类型的字段;现在我意识到只打印“属性”,我应该为它们查找相应的方法。再次感谢 - 干杯!
    • Data::Printer 将输出对象的方法(或它认为的方法)。
    • 有点烦人的 Data::Printer 不包括继承的方法。 (也不是 Moose/Moo/etc 角色提供的方法。)
    猜你喜欢
    • 2014-05-11
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2011-12-04
    • 1970-01-01
    • 2010-09-29
    相关资源
    最近更新 更多