+ -
当前位置:首页 → 问答吧 → 对cpan上的某个模块的constructor有疑问,请教

对cpan上的某个模块的constructor有疑问,请教

时间:2010-11-10

来源:互联网

本帖最后由 gaochong 于 2010-11-10 21:08 编辑

perl学习中。

模块:  http://cpansearch.perl.org/src/BLOONIX/Sys-Statistics-Linux-0.59/lib/Sys/Statistics/Linux/DiskUsage.pm

new代码如下:
sub new {
    my $class = shift;
    my $opts  = ref($_[0]) ? shift : {@_};      -----A
    my %self = (
        cmd => {
            path => '/bin',
            df   => 'df -kP 2>/dev/null',
        }
    );

    foreach my $p (keys %{ $opts->{cmd} }) {    --B
    $self{cmd}{$p} = $opts->{cmd}->{$p};
    }

    return bless \%self, $class;
}

我的疑问在于:
A行、B行的目的何在?
是为了让用户指定cmd的path和df吗?

个人觉得,没有啥用处。

作者: gaochong   发布时间: 2010-11-10

本帖最后由 zhlong8 于 2010-11-10 21:15 编辑

用来处理传入的参数的啊。

A:你可以传入一个 hashref 也可以在new中用 opt1 => v1, opt2 =>v2 …… 这种方式传入参数,A就是这了判断你采用的哪种参数传入方法。
  1. #A

  2. PKG->new({opt1 => v1, opt2 => v2...}); #hashref

  3. #或
  4. PKG->new(opt1=>v1, opt2 => v2 ...);
复制代码
B:将$opt 中配置信息加入对象中[$opt 为 hashref],即处理相应参数加到 cmd 对应的 hash 中

作者: zhlong8   发布时间: 2010-11-10