• 第十章包


    第十章包:
    
    在 Perl 里,一个名字空间叫一个包。包提供了基本的制作块,在它上面 构造更高级的概念,比如模块和
    类等。
    
    
    在 OO 的说法中,每个对象都属于一个叫做类的组
    
    典型的类是用一个 定义了与该类同名的包名字的模块实现的
    
    在 Perl 里的面向对象的编程是通过引用来 实现的,这些引用的引用物
    知道它们属于哪些类
    
    双冒号可以用于把包名字里的标识符链接起来:$Red::Blue::Var。这就意味着 $var 属于 Red::Blue
    包。
    
    
    
    [root@wx03 test]# cat p1.pm
    package p1;
    use base qw(p2);
    use Data::Dumper;
    sub new {
        my $self = {};
        my $invocant = shift;    
    my $class = ref($invocant) || $invocant;
    	my ($name)=@_;    
          my $self = {    
             "name" =>$name    
                     };  
        bless $self, $class; # Use class name to bless() reference
        print "111111111111111111
    ";
    $str=Dumper($self);
    print "$str is $str
    ";
        return $self;
    
    };
    
     $test="fws6f7sfs";
    sub setBeanType{
     my ($self, $name) = @_;##//传进来的第一个参数是类似c++的self指针,第二个才是真正的参数
     $self->{'Bean'} = $name;
     print "Set bean to $name 
    ";
    $str=Dumper($self);
    print "$str is $str
    "; 
    };
    
    
    1;
    
    
    [root@wx03 test]# cat p1.pl
    unshift(@INC,"/root/test"); 
    require p1;
    $ua=p1->new('lily'); 
    print $p1::test;
    
    
    
    [root@wx03 test]# perl p1.pl
    111111111111111111
    $str is $VAR1 = bless( {
                     'name' => 'lily'
                   }, 'p1' );
    
    fws6f7sfs[root@wx03 test]# 
    
    
    
    包里的变量为全局变量,此时p1.pl能够访问到 改为my变量后就无法访问了
    
    
    
    [root@wx03 test]# cat t1.pl 
    unshift(@INC,"/root/test"); 
    require Red::Blue;
    print $Red::Blue::var;
    print "
    ";
    
    [root@wx03 test]# cat Red/Blue.pm 
    package Red::Blue;
    our $var="31313";
    1;
    
    [root@wx03 test]# pwd
    /root/test
    [root@wx03 test]# perl t1.pl 
    31313
    
    访问Red::Blue 模块下的 $var变量
    
    由于这个原因,每个 package 声明都必须声明完整的包名字。任何包名字都没有做任何 隐含的“前缀”的假设,甚
    至(看起来象)在一些其他包声明的范围里声明的那样也 如此。
    
    
    10.1 符号表:
    
    
    因为包是散列,因此你可以找出该包的键字然后获取所有包中的变量。因此该散列的数值 都是类型团,你可以用好
    几种方法解引用。比如:
    
    
    Red::Blue 包的符号表名字是 %Red::Blue::。同时 main 符号表还包含所有其他 顶层的符号表,包括它
    本身。因此 %Red::Blue:: 同时也是 %main::Red::Blue::。
    
    请注意,如果你做这些事
    情,那么你将看不到用 my 声明的变量,因为 它们都是独立于包的,不过你看得到用 our 声明的变量。
    
    
    10.2 自动装载
    

  • 相关阅读:
    vector、list、deque三者比较
    python多线程
    爬虫入门之线程进程协程抓取方法(八)
    爬虫之绘图matplotlib与词云(七)
    python字符串反转 高阶函数 @property与sorted(八)
    爬虫入门之Requests模块学习(四)
    爬虫入门之handler与opener(三)
    mongodb/python3.6/mysql的安装
    nginx配置+uwsgi+负载均衡配置
    [JLOI2016] 成绩比较
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6200041.html
Copyright © 2020-2023  润新知