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();
    };
    
    
    
    
    


    
       
    
    
  • 相关阅读:
    Elasticsearch常用命令
    Linux中使用systemctl操作服务、新建自定义服务
    Windows下安装MongoDB解压版
    Java执行cmd命令、bat脚本、linux命令,shell脚本等
    Ubuntu
    PostgreSQL删除数据库失败处理
    Ubuntu service 命令
    Ubuntu18修改/迁移mysql5.7数据存放路径
    攻防世界-web-ics-02(sql注入、ssrf、目录扫描)
    攻防世界-web-filemanager(源码泄漏、二次注入)
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199976.html
Copyright © 2011-2022 走看看