免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1806 | 回复: 3
打印 上一主题 下一主题

对cpan上的某个模块的constructor有疑问,请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-10 21:02 |只看该作者 |倒序浏览
本帖最后由 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吗?

个人觉得,没有啥用处。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2010-11-10 21:11 |只看该作者
本帖最后由 zhlong8 于 2010-11-10 22:13 编辑

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

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 中

path df 这里是默认的,设定好了的。

论坛徽章:
0
3 [报告]
发表于 2010-11-11 09:30 |只看该作者
对B语句,哪个用户会指定 key是cmd,value是hash ref的hash 呀?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2010-11-11 11:02 |只看该作者
文档里面有第二种用法的例子啊
  1.      Sys::Statistics::Linux::DiskUsage->new(
  2.         cmd => {
  3.             # This is the default
  4.             path => '/bin',
  5.             df   => 'df -kP 2>/dev/null',
  6.         }
  7.     );
复制代码
这里 cmd 不是 reference, 所以 $opt = {cmd => {...}}。 这里的 $opt 不就是个hashref, key 是 cmd 值是个 hashref ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP