免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4751 | 回复: 2

求讲解这个new函数是什么意思 [复制链接]

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
发表于 2013-09-01 14:10 |显示全部楼层
  1. [code][code]package Mojo::Base;

  2. use strict;
  3. use warnings;
  4. use utf8;
  5. use feature ();

  6. # No imports because we get subclassed, a lot!
  7. use Carp ();

  8. # Only Perl 5.14+ requires it on demand
  9. use IO::Handle ();

  10. sub import {
  11.   my $class = shift;
  12.   return unless my $flag = shift;
  13.   no strict 'refs';

  14.   # Base
  15.   if ($flag eq '-base') { $flag = $class }

  16.   # Strict
  17.   elsif ($flag eq '-strict') { $flag = undef }

  18.   # Module
  19.   elsif ((my $file = $flag) && !$flag->can('new')) {
  20.     $file =~ s!::|'!/!g;
  21.     require "$file.pm";
  22.   }

  23.   # ISA
  24.   if ($flag) {
  25.     my $caller = caller;
  26.     push @{"${caller}::ISA"}, $flag;
  27.     *{"${caller}::has"} = sub { attr($caller, @_) };
  28.   }

  29.   # Mojo modules are strict!
  30.   strict->import;
  31.   warnings->import;
  32.   utf8->import;
  33.   feature->import(':5.10');
  34. }

  35. sub new {
  36.   my $class = shift;
  37.   bless @_ ? @_ > 1 ? {@_} : {%{$_[0]}} : {}, ref $class || $class;
  38. }
复制代码
[/code][/code]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
发表于 2013-09-01 16:22 |显示全部楼层
哎呦,我去,这家伙写的真好啊。

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
发表于 2013-09-01 22:01 |显示全部楼层
本帖最后由 stanley_tam 于 2013-09-01 22:10 编辑

成心不让人看懂哈。貌似是这样的{:3_204:}:
  1. sub new {
  2.     my $class = shift;
  3.     my $self = +{};

  4.     $class = ref $class || $class;

  5.     if (@_) {
  6.         if (@_> 1) {
  7.             $self = {@_};
  8.         }
  9.         else {
  10.             # { %{$_[0]} } is equivalent to $_[0] but raise error when $_[0] is not hash reference
  11.             $self = $_[0];  
  12.         }
  13.     }

  14.     bless $self, $class;
  15. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP