zoukankan      html  css  js  c++  java
  • 菜鸟教程perl总结

    数据类型有:  标量$, 数组@,哈希%

    数组声明 :  @hits = (25, 30, 40);  或者  @sites = qw/google taobao runoob/;

    数组操作 pop, push, shift, unshif, splice(@ARRAY,OFFSET,LENGTH,LIST),   join, sort

    合并数组, @numbers = (@odd, @even);  从列表中选择元素 @list = (5,4,3,2,1)[1..3];

     哈希:   %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');

                  或者: %data = (-google=>'google.com', -runoob=>'runoob.com', -taobao=>'taobao.com');

                 判断元素是否存在, exists($data{'facebook'} )

                获取元素大小: $size = @keys; , 删除元素 delete $data{'taobao'};  增加元素 $data{'facebook'} = 'facebook.com';

     foreach $a (@list{ print "a 的值为: $a ";  

    运行符: =, +=, *=,%=,等 逻辑运行符  &&, ||, and, or, not, ++, --,  ('-' x 3) 输出为 --- 

    引号运算: q{abcd} 结果为 'abcd' , qq{abcd} 结果为 "abcd"

     格式时间,获得当前时间:   use POSIX qw(strftime);    $datestring = strftime "%Y-%m-%d %H:%M:%S", localtime;

    子程序(程序)

    sub function { } 调用则是function(); 

     参数:  子程序参数使用特殊数组 @_ 标明。因此子程序第一个参数为 $_[0], 第二个参数为 $_[1], 以此类推。

     传递哈希:  当向子程序传递哈希表时,它将复制到 @_ 中,哈希表将被展开为键/值组合的列表。 my (%hash) = @_;   //转成哈希

     返回值:  默认最后的值为返回值,  如果没有使用 return 语句,则子程序的最后一行语句将作为返回值

    私有变量: my

    临时变量 :  local,  我们可以使用 local 为全局变量提供临时的值,在退出作用域后将原来的值还回去

    静态变量:  state $count = 0; # 初始化变量,     不过在Perl中想要使用state必须在文件开头加上 use feature qw(state); 或者 use 5.010; 因为state功能是在5.010版本中才开始提供的。

    perl引用

    $scalarref = $foo; # 标量变量引用

    $arrayref  = @ARGV;    # 列表的引用
    $hashref   = \%ENV;     # 哈希的引用
    $coderef   = &handler; # 子过程引用
    $globref   = *foo;     # GLOB句柄引用

    取消引用可以根据不同的类型使用 $, @ 或 % 来取消

    perl格式化输出, 格式语法如下:
    format FormatName =
    fieldline
    value_one, value_two, value_three
    fieldline
    value_one, value_two
    .

    文件操作
    open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";
     
    while(<DATA>){
       print "$_";
    }
    模式描述
    < 或 r 只读方式打开,将文件指针指向文件头。
    > 或 w 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    >> 或 a 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
    +< 或 r+ 读写方式打开,将文件指针指向文件头。
    +> 或 w+ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    +>> 或 a+ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
     删除文件
    unlink ("/usr/runoob/test/file1.txt");

    文件重命名
    rename ("/usr/runoob/test/file1.txt", "/usr/runoob/test/file2.txt" );

    读入文件
    $name = <STDIN>; 
    print "网址:$name ";

    目录操作
    # 显示 /tmp 目录下所有以 .c 结尾的文件
    $dir = "/tmp/*.c";
    @files = glob( $dir );
     
    foreach (@files ){
       print $_ . "
    ";
    }
    # 显示 /tmp 和 /home 目录下的所有文件
    $dir = "/tmp/* /home/*";
    @files = glob( $dir );
     
    foreach (@files ){
       print $_ . "
    ";
    }

    错误处理

    die 函数类似于 warn, 但它会执行退出。一般用作错误信息的输出: 

    chdir('/etc') or die "无法切换目录";

    warn 函数用于触发一个警告信息,不会有其他操作,输出到 STDERR(标准输出文件),通常用于给用户提示:

    chdir('/etc') or warn "无法切换目录";

    Carp 模块

    在 Perl 脚本中,报告错误的常用方法是使用 warn() 或 die() 函数来报告或产生错误。而对于 Carp 模块,它可以对产生的消息提供额外级别的控制,尤其是在模块内部。

    cluck() 与 warn() 类似,提供了从产生错误处的栈回溯追踪。

    croak() 与 die() 一样,可以结束脚本。

    confess() 与 die() 类似,但提供了从产生错误处的栈回溯追踪。

     

    Perl 特殊变量

    在迭代循环中,当前循环的字符串会放在 $_ 中, 然后 通过 print 输出。另外 print 在不指定输出变量,默认情况下使用的也是 $_。

    $$ 运行当前Perl脚本程序的进程号

    Perl 正则表达式

    Perl的正则表达式的三种形式,分别是匹配,替换和转化:

    • 匹配:m//(还可以简写为//,略去m)

    • 替换:s///

    • 转化:tr///

    这三种形式一般都和 =~ 或 !~ 搭配使用, =~ 表示相匹配,!~ 表示不匹配。

    $bar = "I am runoob site. welcome to runoob site.";
    if ($bar =~ /run/){
       print "第一次匹配
    ";
    }else{
       print "第一次不匹配
    ";
    }
     
    $bar = "run";
    if ($bar =~ /run/){
       print "第二次匹配
    ";
    }else{
       print "第二次不匹配
    ";
    }

    替换, 例如我们将以下字符串的 "google" 替换为 "runoob": 格式如下: 

    s/PATTERN/REPLACEMENT/;
    $string = "welcome to google site.";
    $string =~ s/google/runoob/;
     
    print "$string
    ";

    正则表达式变量

    • $`: 匹配部分的前一部分字符串
    • $&: 匹配的字符串
    • $': 还没有匹配的剩余字符串
     
    $string = "welcome to runoob site.";
    $string =~ m/run/;
    print "匹配前的字符串: $`
    ";
    print "匹配的字符串: $&
    ";
    print "匹配后的字符串: $'
    ";

    对象的创建和使用

    sub new
    {
        my $class = shift;
        my $self = {
            _firstName => shift,
            _lastName  => shift,
            _ssn       => shift,
        };
        # 输出用户信息
        print "名字:$self->{_firstName}
    ";
        print "姓氏:$self->{_lastName}
    ";
        print "编号:$self->{_ssn}
    ";
        bless $self, $class;
        return $self;
    }

    使用创建的对象

    $object = new Person( "小明", "", 23234345);

    Perl 里 类方法通过@ISA数组继承,这个数组里面包含其他包(类)的名字,变量的继承必须明确设定。

    多继承就是这个@ISA数组包含多个类(包)名字。

    Perl 包和模块

    从一个包中访问另外一个包的变量,可通过" 包名 + 双冒号( :: ) + 变量名 " 的方式指定。

    特殊变量 __PACKAGE__ 用于输出包名:

    Perl语言提供了两个关键字:BEGIN,END。它们可以分别包含一组脚本,用于程序体运行前或者运行后的执行。
    package Foo;
    print "Begin 和 Block 实例
    ";
     
    BEGIN { 
        print "这是 BEGIN 语句块
    " 
    }
     
    END { 
        print "这是 END 语句块
    " 
    }

    Perl 模块是一个可重复使用的包,模块的名字与包名相同,定义的文件后缀为 .pm

    我们注意到 require 引用需要使用包名指定函数,而 use 不需要,二者的主要区别在于:

    • 1、require用于载入module或perl程序(.pm后缀可以省略,但.pl必须有)
    • 2、Perl use语句是编译时引入的,require是运行时引入的
    • 3、Perl use引入模块的同时,也引入了模块的子模块。而require则不能引入,要在重新声明
    • 4、USE是在当前默认的@INC里面去寻找,一旦模块不在@INC中的话,用USE是不可以引入的,但是require可以指定路径
    • 5、USE引用模块时,如果模块名称中包含::双冒号,该双冒号将作为路径分隔符,相当于Unix下的/或者Windows下的。 如: use MyDirectory::MyModule


    特殊变量:  

    @_获得传得参数的值, $n = scalar(@_);可获得个数。

  • 相关阅读:
    C++调用WebService
    vs2005 环境的字体和颜色的设置
    自娱自乐~经典24点游戏
    再探利用C++的STL和堆栈编程思想实现数学四则运算计算结果
    如何在Linux中关闭apache服务(转)
    ios推送:本地通知UILocalNotification
    ASIHTTPRequest的使用(转)
    实战新浪微博、腾讯微博的分享功能(转)
    UIImagePickerController拍照与摄像(转)
    iOS通过http post上传图片 (转)
  • 原文地址:https://www.cnblogs.com/qinzb/p/8991186.html
Copyright © 2011-2022 走看看