Perl语言入门——目标操作

来源:互联网 发布:最全的php扩展开发教程 编辑:程序博客网 时间:2024/05/10 02:08
在目录树中移动:程序运行时会以自己的工作目录作为相对起点,可以用chdir操作符来改变当前的工作目录
    chdir "/etc"or die "can not chdir to /etc:$ !";
   注意程序结束时,又会回到开始的工作目录
   如果省略参数,perl会猜想回到自己的用户主目录
   有些shell能使用波浪号前缀来定位另一个用户的主目录,perl的chdir不可以
文件名通配:一般来说,shell会将命令行里德文件名模式展开为所有匹配的文件名,称为文件名通配
   假设将*.pm这个文件名模式交给echo命令,shell会将它展开成名称相匹配的文件列表
   在程序内部,可能会想要用*.pm之类的模式,只要用glob操作符就行了
    my@all_files= glob "*";
    my@pm_files= glob "*.pm";
   其中@all_files会取得当前目录中的所有文件,并按字母顺序排序,但不包括以点号开头的文件
   任何能够在命令行上键入的模式,都可以作为参数交给glob处理,如果要一次处理多种模式,可以
   在参数中用空格隔开各个模式
    my@all_files_including_dot= glob ".* *";
文件名通配的另一种语法:在glob操作符出现之前,用尖括号来调用此功能
    my@all_files= <*>;
   和双引号字符串内插类似,尖括号内的变量也会被替换为变量当前的值
    my$dir="/etc";
    my@all_files=<$dir/* $dir/.*>;
目录句柄:若想从目录里取得文件名列表,可以使用目录句柄
   目录句柄看起来像文件句柄,使用起来也没多大差别,命令为opendir readdir closedir
    my$dir_to_process ="/etc";
    opendirDH,$dir_to_process or die "cannot open $dir_to_process";
    foreach$file (readdir DH){
       print "one file in $dir_to_process is $file\n";
    }
    closedirDH;
   注意readdir操作符返回的文件名并不包含路径,它们只是目录下的文件名而已
删除文件:在perl中使用unlink操作符删除文件
    unlink"slate","bedrock","lava"; #将三个文件放进碎纸机,从此消失在系统中
   既然unlink的参数是列表,glob函数又返回列表,可以融合两者,一次删除多个文件
    unlink glob"*.o";  #类似于在shell中的rm *.o
   unlink的返回值代表成功删除了多少个文件
   unlink不能用来删除目录,可以使用rmdir函数
重命名文件:想为现有文件取个新名字,可以使用rename函数
    rename"old","new";
   甚至可以将文件移到其他目录中
    rename"over_there/some/place/some_file","some_file";
   批量把.old结尾的文件名改为.new结尾
    foreach my$file (glob "*.old"){
       my $newfile=$file;
       $newfile =~ $file;
       if (-e $newfile){
           warn "can't rename $file to $newfile:$newfile exists\n";
       } elsif (rename $file,$newfile){
       } else{
           warn "rename $file to $newfile failed: $!\n";
       }
    }
   循环里的前两行程序代码可以合并成(my $newfile =$file)=~ s/\.old$/.new/;
链接与文件:link函数建立链接
    link"chicken","egg" or warn "can't link chicken to egg: $!";
   symlink函数建立软链接
    symlink"dodgson","carroll" or warn "can't symlink dodgson tocarroll";
   readlink函数返回符号链接指向的位置
    my$where=readlink "carroll";
建立及移除目录:在现有的目录下建立新目录只要调用mkdir
    mkdir"fred", 0755 or warn "cannot make fred directory: $!";
   0755代表目录的初始权限,是八进制数值,注意不要漏了0,否则就是十进制的755了
   注意想当成数字的字符串,即使以0开头,也不会解释成八进制,下面的写法是不行的
    my $name="fred";
    my$permissions="0755"; #危险,不能这么用
    mkdir$name,$permissions;
   要正确处理字符串,需使用oct函数,能强行将字符串当初八进制数字处理(即使非0开头)
    mkdir $name,oct($permissions);
   想移除空目录,用rmdir函数,前提是目录已清空
修改权限:perl里的chmod函数可以像Unix中的chmod命令一样来修改文件或目录的权限
    chmod0755,"fred","barney";
   和许多其他的操作系统接口函数一样,chmod会返回成功更改的条目数量
   perl中的chmod函数不接受符号表示的权限(+x 或go=u-w等)
更改隶属关系:可以用chown函数更改一系列文件的拥有者以及他们所属的组
    my$user=1004;
    my$group=100;
    chown$user,$group,glob "*.o";
   拥有者或所属组必须以数字形式表示,对于字符串,只需用getpwnam函数将用户名翻译成数字
   再用getgrnam函数来把组名翻译成数字
    defined(my$user= getpwnam "merlyn") or die "bad user";
    defined(my$group= getgrnam "users") or die "bad group";
    chown$user,$group,glob "/home/merlyn/*";
修改时间戳:可以使用utime函数来修改某个文件最近更改或访问的时间
    my $now=time;
    my $ago=$now ? 24*60*60;  #一天的秒数
    utime $now$ago,glob "*"; #将最后访问时间改为当前时间,最后修改时间改为一天前
0 0
原创粉丝点击