zoukankan      html  css  js  c++  java
  • Perl--包和模块

    模块就是用包来实现的
    
    使代码段不发生冲突而用以分开代码的空间。
    把变量和函数分为不同区间的标记。不同空间中的变量或函数可以同名。使用变量要带上名空间的前缀$name::a。
    
    
    用包来实现名字空间
    
    一个包就是一个文件
    
    Perl5 用包来创建模块:
    
    require: 类似C语言的include 把其他地方写好的程序包含进来
    
    require 运行到时才把程序包含进来
    
    
    use 把模块导入你的Perl程序中
    
    将模块导入你的Perl程序中使用use语句 use Mymodule;
    这样,模块Mymodule中的子程序和变量就可以使用了。
    取消导入模块使用no语句
    
    , no Mymodule;
    1。编译时运行:use相当于在BEGIN{}中执行,把use用于互斥条件会出错。if(con){use mod1;}else{use mod2;}实际
    
    上是use mod1;use mod2;if(con){}else{}当mod2不存在是出错。此时用require.
    2。带参数的use add 2,2;使用import函数接收参数
    
    ('add',2,2)
    	use mod ('a','b')只引入a,b
    3. use strict;
        use Config编译环境存在%Config中,如Config{'osname'};
        use 
    
    vars想使用全局变量,但又用了strict(使用my). use vars qw($file);
    
    
    use strict;
    
    变量必须是my声明
    
    use vars想使用全局变量,但又用了strict(使用my). use vars qw($file);
    
    在 Perl 里,一个名字空间叫一个包。
    
    构造含义
    $days 简单标量值 $days
    $days[28] 数组 @days 的第二十九个元素
    $days{'Feb'} 散列 %days 的“Feb”值
    
    
    构造含义
    ${days} 和 $days 一样,不过在字母数字前面不易混淆
    $Dog::days 在 Dog 包里面的不同的 $days 变量
    $#days 数组 @days 的最后一个索引
    $days->[28] $days一个引用指向的数组的第二十九个元素
    $days[0][2] 多维数组
    $days{200}{'Feb'} 多维散列
    $days{2000,'Feb'} 多维散列枚举
    
    Perl 里的符号表也被称为包(package),因此这些变量常被称为包变量
    
    任何提到 $Dog::bert 的程序都是获取位于 Dog:: 包的变量 $bert
    
    main默认的包名,没有单独的文件
    
    包定义:
    
    名字空间namespace:
    
    使代码段不发生冲突而用以分开代码的空间。
    
    把变量和函数分为不同区间的标记,不同空间中的变量或函数可以同名。使用变量要带上名空间的前缀$name::a
    
    
    包定义 package mypack;
    
    得到main包所有的变量名:
    
    [oracle@jhoa 2]$ cat 1.pl 
    foreach $key (keys %main::)
    {print "$$key => $main::{$key}
    ";}
    [oracle@jhoa 2]$ perl 1.pl 
    $/ => *main::/
    $stderr => *main::stderr
    $key => *main::key
    $utf8:: => *main::utf8::
    $" => *main::"
    $CORE:: => *main::CORE::
    $DynaLoader:: => *main::DynaLoader::
    $stdout => *main::stdout
    $attributes:: => *main::attributes::
    $ => *main::
    $stdin => *main::stdin
    $ARGV => *main::ARGV
    $INC => *main::INC
    $ENV => *main::ENV
    $Regexp:: => *main::Regexp::
    $UNIVERSAL:: => *main::UNIVERSAL::
    $$ => *main::$
    $_<perlio.c => *main::_<perlio.c
    $main:: => *main::main::
    $- => *main::-
    $_<perlmain.c => *main::_<perlmain.c
    $PerlIO:: => *main::PerlIO::
    $_<universal.c => *main::_<universal.c
    $0 => *main::0
     => *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>::
    [oracle@jhoa 2]$ cat 1.pl 
    foreach $key (keys %main::)
    {print "$$key => $main::{$key}
    ";}
    
    
    得到变量$a的值print ${$main::{'a'}};
    
    存储变量和子程序的名字的缺省符号表为main包,如果在程序里定义了其它的包,当你想切换回去使用缺省的符号表,可以重新指定main包
    
    。
    
    
    2.5.1 名字查找
    
    常用通用含义替换
    ' '      q//      文本字串否
    " "    qq//       文本字串是
    ` `   qx//        执行命令是
    ()   qw//         单词数组否
    //   m//          模式匹配是
    s///   s///         模式替换是
    y///   tr///        字符转换否
    " "   qr//          正则表达式是
    
    
    [oracle@jhoa 2]$ cat 2.pl 
    unlink('aa');
    
    删除aa文件
    
    [oracle@jhoa 2]$ cat 3.pl 
    @files=qw/1 2 3 4 5 6/;
    while (@files) {
    my $file = shift @files;
    print "$file is $file
    ";
    }
    [oracle@jhoa 2]$ perl 3.pl 
    $file is 1
    $file is 2
    $file is 3
    $file is 4
    $file is 5
    $file is 6
    
    [oracle@jhoa 2]$ cat 4.pl 
    @stuff = ("one", "two", "three"); $stuff = @stuff;
    print "$stuff is $stuff
    ";
    
    
    2.11.2 行输入(尖角)操作符
    
    @line = <STDIN>;
    foreach   (@line){
    print "$_ is $_
    ";
    };
    
    
    @line = <>;
    foreach   (@line){
    print "$_ is $_
    ";
    };
    
    <> 指定文件获得
    
    <STDIN>获取标准输入
    
    
    2.11.3 文件名聚集操作符
    @files=<*.pl>;
    foreach (@files){print $_};
    
    
    使用模块的例子:
    
    [oracle@june2 perl]$ cat a1.pl 
    #!/usr/bin/perl
    use  integer;
    $result = 2.4 + 2.4;
    print "$result
    ";
    
    no integer;
    $result = 2.4 + 2.4;
    print "$result
    ";
    [oracle@june2 perl]$ perl a1.pl 
    4
    4.8
    
    如果use或no语句出现在语句块中,则只在该块的有效范围内起作用
    模块的说明,常嵌入在模块中用perldoc mod来查看
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    pidgin的未认证解决办法
    题解【洛谷P1074】[NOIP2009]靶形数独
    题解【洛谷P1315】[NOIP2011]观光公交
    题解【BZOJ4145】「AMPPZ2014」The Prices
    题解【洛谷P4588】[TJOI2018]数学计算
    题解【洛谷P3884】[JLOI2009]二叉树问题
    题解【SP8002】HORRIBLE
    树链剖分学习笔记
    题解【洛谷P1807】最长路_NOI导刊2010提高(07)
    题解【洛谷P1995】口袋的天空
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351963.html
Copyright © 2011-2022 走看看