加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl实例详解第四版笔记2 模块化

发布时间:2020-12-15 21:01:50 所属栏目:大数据 来源:网络整理
导读:1.将数据和函数包装到单独的命名空间中称为封装(encapsulation)(C++程序员称之为类(class),面向对象的perl程序员称之为类)。独胆的命名空间又称之为包(package)。单独的命名空间意味着:对于命名包中的所有变量,perl都持有一个单独的符号表。 2.符

1.将数据和函数包装到单独的命名空间中称为封装(encapsulation)(C++程序员称之为类(class),面向对象的perl程序员称之为类)。独胆的命名空间又称之为包(package)。单独的命名空间意味着:对于命名包中的所有变量,perl都持有一个单独的符号表。

2.符号表:在编译程序时,编译器必须记录使用的所有变量名、文件句柄、目录句柄、格式和子函数。perl将这些符号的名称作为键存储在每个包的散列表中。散列的名称与包名相同。与散列键相关联的值是对应的typeglob值,又称为别名(aliase)。typeglob会“glob”所有可用符号名称表达的类型。对于用相同名称表示的每个值,perl实际上会创建单独的内部指针。如下:

?

每个包都有它自己的符号表。无论何时使用包生命,都要切换到该包的符号表。

用户可通过双冒号(::)用包名限定某个由local函数赋值的变量,从而实现在另一个包中访问该变量。此时该变量仍在作用域中,并可从主机符号表中访问它。

由my函数赋值的变量将不能从其所在包的外面访问。他们并没有存储在包符号表中,而是存储在每个调用子函数创建的专用缓冲区里。因此,在使用“my”创建变量时,用户将无法通过包的符号表来访问他们,因为他们根本不在那里。

?

[root@dou shili]# cat p1.pl
#!/usr/bin/perl -w
use strict;

our (@friends,@dogs,$key,$value); my($name,$money); $name="susan"; @friends=qw(tom jack); @dogs=qw(china usa); local $main::dou="hello"; $money="dollar"; while(($key,$value) = each(%main::)) { ??????? print "$key:t$valuen"; } [root@dou shili]# perl p1.pl Name "main::dou" used only once: possible typo at p1.pl line 9. /:????? *main::/ stderr: *main::stderr friends:??????? *main::friends key:??? *main::key utf8::: *main::utf8:: ":????? *main::" CORE::: *main::CORE:: DynaLoader:::?? *main::DynaLoader:: strict:::?????? *main::strict:: stdout: *main::stdout attributes:::?? *main::attributes:: :?????? *main:: stdin:? *main::stdin ARGV:?? *main::ARGV value:? *main::value INC:??? *main::INC ENV:??? *main::ENV Regexp:::?????? *main::Regexp:: UNIVERSAL:::??? *main::UNIVERSAL:: $:????? *main::$ _<perlio.c:???? *main::_<perlio.c dou:??? *main::dou main::: *main::main:: Carp::: *main::Carp:: -:????? *main::- _<perlmain.c:?? *main::_<perlmain.c PerlIO:::?????? *main::PerlIO:: _<universal.c:? *main::_<universal.c 0:????? *main::0 BEGIN:? *main::BEGIN???????????????????????????????????????????????????????????????????? :*main:: @:????? *main::@ _<xsutils.c:??? *main::_<xsutils.c STDOUT: *main::STDOUT IO:::?? *main::IO:: :?????? *main:: _:????? *main::_ +:????? *main::+ STDERR: *main::STDERR Internals:::??? *main::Internals:: STDIN:? *main::STDIN DB:::?? *main::DB:: <none>:::?????? *main::<none>:: dogs:?? *main::dogs ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读