• perl 继承概述


    <pre name="code" class="html">[root@wx03 test]# cat Horse.pm 
    package Horse;
    ##Horse继承了Critter类,Critter这里是基类或者父类
    use base qw(Critter);
    sub new {
    my $invocant = shift;
    my $class = ref($invocant) || $invocant;
    my $self = {
    color => "bay",
    legs => 4,
    owner => 'scan',
    @_, # 覆盖以前的属性
    };
    return bless $self, $class;
    #return  $self;
    };
    sub sum1 {
           $self=shift;
           my $a=shift;
           my $b=shift;
           return $a + $b + 7;
    };
    
    our @arr=qw/1 2 3 4 5 6 7/;
    our %h1=(1,2,3,4,5,6,7,8);
    1;
    
    [root@wx03 test]# cat Critter.pm 
    package Critter;
    
    
    sub sum2 {
           $self=shift;
           my $a=shift;
           my $b=shift;
           return $a + $b;
    };
    
    
    sub fun1 {
           $self=shift;
           message::message($self);
    };
    
    
    sub fun2 {
           $self=shift;
           $var='bosdadada';
           return $var;
    };
    sub on_receive_msg:lvalue{
          $self=shift;
          $self->{name}="aabbccdd123141242";
          $self->{on_receive_msg};
    };
    
    our $str="12312";
    1;
    
    /*******************
    [root@wx03 test]# cat t10.pl 
    unshift(@INC,"/root/test"); 
    use Horse;;
    my $ua=Horse->new();
    
    
    my $str=$ua->fun2();
    print $str;
    print "
    ";
    
    
    [root@wx03 test]# perl t10.pl 
    bosdadada
    
    
    如果去掉Horse类里的继承:
    
    package Horse;
    #use base qw(Critter);
    sub new {
    my $invocant = shift;
    
    [root@wx03 test]# perl t10.pl 
    Can't locate object method "fun2" via package "Horse" at t10.pl line 6.
    
    提示找不到fun2方法
    
    
    /***********************
    [root@wx03 test]# cat t10.pl 
    unshift(@INC,"/root/test"); 
    use Horse;;
    my $ua=Horse->new();
    
    
    my $str=$ua->fun1();
    print $str;
    print "
    ";
    
    [root@wx03 test]# perl t10.pl 
    Undefined subroutine &message::message called at Critter.pm line 15.
    
    
    没有use message;:
    
    package Critter;
    #use message;
    
    
    sub sum2 {
           $self=shift;
           my $a=shift;
           my $b=shift;
           return $a + $b;
    };
    
    
    sub fun1 {
           $self=shift;
           message::message($self);
    };
    
    
    
    解决方案:
    
    1):
    package Critter;
    ##继承message类
    use base qw/message/;
    
    
    sub sum2 {
           $self=shift;
           my $a=shift;
           my $b=shift;
           return $a + $b;
    };
    
    
    sub fun1 {
           $self=shift;
           $self->message();
    };
    
    
    
    2):
    package Critter;
    use message;
    
    
    sub sum2 {
           $self=shift;
           my $a=shift;
           my $b=shift;
           return $a + $b;
    };
    
    
    sub fun1 {
           $self=shift;
           message::message($self);
           # $self->message();
    };
    
    
    
    
    


    
       
    
    
  • 相关阅读:
    Windows API 的数据类型与 Delphi 数据类型对照表
    Delphi 编译错误信息表
    Delphi中的容器类
    Delphi 快捷键
    代码折叠
    [转]Delphi中record的使用
    [转]常用公共函数单元
    Delphi 运行时错误信息表
    C#调用Win32 的API函数User32.dll
    [转]Delphi程序启动参数的读取
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199976.html
Copyright © 2020-2023  润新知