zoukankan      html  css  js  c++  java
  • 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();
    };
    
    
    
    
    


    
       
    
    
  • 相关阅读:
    Haskell语言学习笔记(54)Data.Set
    Haskell语言学习笔记(53)Data.Sequence
    正则表达式(Java,C#,C++)
    Haskell语言学习笔记(52)正则表达式
    Haskell语言学习笔记(51)Comonad
    最大获利
    最小生成树
    PIGS
    三维偏序
    <noip2017>列队
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199977.html
Copyright © 2011-2022 走看看