perl系列:其他

 文件测试符
    print "exits\n" if -e name;    #测试文件或目录是否存在
    print "directory\n" if -d name;    #测试name是文件还是目录
    print "NULL\n" if -z name;    #测试是否为空文件(无内容)
    #省略name,则测试$_。
    #使用目录句柄读取文件时,不包含路径,因此在文件测试时要注意加上路径。

文件和目录的一些命令
    unlink    #删除文件
    rename "old", "new"    #重命名文件
    mkdir    #建立目录
    rmdir    #删除目录
    $dir=$ENV{'PWD'};    #获取当前目录
    chdir    #切换工作目录

对于任何读入的外部数据,其任何操作都是在内存里进行的,必须再写回去才能对原数据修改。

高级排序
    1、sort只是按照ASCII码排序
    2、不区分大小写的字母排序
        sort {"\L$a" cmp "\L$b"} @a;    
        #实际上是使用了一个简写的匿名子程序,注意$a和$b相当于一个默认变量
    3、按值对散列排序
        sort {$hash{$a} <=> $hash{$b}} keys %hash;    
        #先取散列的键,按键对应的值大小排序,返回排序后的键
    4、高级排序原理
        实际上是定义一个排序子程序,声明排序的依据,即需要比较的东西。
        例如按值对散列排序中,排序的是键,但依据是键的值。
        如果比较的数值,则使用"<=>";如果比较的字母,则使用"cmp"。
        使用$a和$b作为默认变量,用来传递直接比较的参数。默认递增排序。
    5、可以定义一个子程序,实现多条件的排序。
        sub by_multi {    #对散列的键排序,先按值大小排序,值相同按键字母排序
            $hash{$a} <=> $hash{$b} or    #注意"or"的使用
            $a cmp $b
            }
        @a=sort by_multi keys %hash;    #调用子程序排序
        #注意这个子程序可看作sort的修饰符,没有使用参数,也没有使用&
        多条件排序也可以简写为匿名子程序,上面这个也可以写成:
        @a=sort {$hash{$a} <=> $hash{$b}
                or $a cmp $b
                } keys %hash;
        print "@a\n";    #注意省略了子程序名

使用pod进行多行注释
    以"=标识符"开头,以"=cut"结尾。建议使用"=pod"开头。
    例:
    =Readme
    。。。。。。
    =cut

终止死循环
    ctrl+c或ctrl+break

数组取子集
    1、可使用下标抽取子集,但原数组不变
        @a=(1..10); print "@a\n@a[4,8,2]\n";
    2、使用splice提取子集,提取部分在原数组中删掉了
        @a=(1..10); @b=splice(@a, 2, 3); print "@a\n@b\n";

取随机数和随机抽样
    rand(x)    #返回[0,x)的随机数,若省略x,则默认为[0,1)。注意区间两侧的开闭。
        注意:10以内的随机整数,不包括10,应该为:int(rand(10))
    @a=qw/A T C G/; push @b, $a[rand @a] for (1..n);
        有放回等概率抽样,n为样本含量
    @a=qw/A T C G/ x 10; push @b, splice(@a, rand @a, 1) for (1..n);
        无放回抽样,n<=$#a

使用glob获取当前目录文件
    @files=glob "*.*";
    其功能可以使用目录句柄实现,但通配符"*"只能用于glob。

一句话命令
    perl可以使用'-e'参数直接在命令行执行简单程序。
        perl -e 'print "$_\n" for 1..<>'    #注意程序应在两个单引号之间
    可以加文件名参数
        perl -e 'while (<>) {print if /hello/}' test.txt    #将test.txt中有hello的行输出

记录程序运行时间
    1、获取程序运行总耗时
    time perl x.pl
        #返回三个时间:real, user, sys
        #real是总时间;user是占用用户时间;sys是占用系统时间
    2、在程序运行过程中输出时间
        2.1    print scalar localtime, "\n";    #输出‘Fri May 17 09:25:18 2013‘
        2.2    $a=time; sleep(1); print time-$a,"\n";    #输出‘1’


你可能感兴趣的:(perl系列:其他)