Perl目录操作

本文详细介绍了Perl中关于目录的各种操作,包括查看和修改工作目录、文件名通配、删除和重命名文件、创建和删除目录,以及修改文件权限。通过示例展示了如何使用chdir、glob、unlink、rename、mkdir、rmdir、chmod等函数,帮助读者理解Perl在文件系统操作上的功能。
摘要由CSDN通过智能技术生成

Perl目录操作

1. 工作目录

1.1 当前工作目录

程序运行的时候总有一个相应的工作目录,后续要做的事情都是从这个目录开始的。借助标准模块的Cwd模块,我么可以查看当前目录。

#!/usr/bin/perl
#code1
use v5.10;
use Cwd;
say "The cuurent working directory is:",getcwd();
#打印的路径应该就是程序的保存位置,和在Shell中执行pwd的结果相同。
#code2
#如果使用相对路径(没有提供文件系统树顶端的路径)打开文件,perl会按照当前目录定位这个路径。
#当前目录/home/fred,运行以下代码读取文件:
open my $fh,'<','relative/path.txt';
#perl会打开/home/fred/relative/path.txt文件

1.2 修改工作目录

如果不希望当前工作目录在程序所在目录,可以使用 chdir 操作符修改,它的用法和 shell 中的 cd 一致

  • chdir ‘/etc’ or die “Can’t change to /etc: $!”
  • 由Perl程序启动的所有进程都会继承Perl程序的工作目录。我们可以改变perl的工作目录,但是不能改变其父进程,即shell的工作目录。
  • chdir 不加参数,Perl 会认为我们需要回到用户主目录,和在 shell 中使用不带参数的 cd 一致。

1.3 文件名通配

一般而言,shell 会将命令行中的文件名模式展开为所有匹配的文件名,这就叫做文件名匹配 (glob),比如吧*.pm这个参数交给 echo, shell 将会将它展开为所有相匹配的文件列表。

#!/usr/bin/perl
$ echo *.pm                       # $表示在命令行输入
#打印 
banery.pm fred.pm dino.pm
#这里的echo命令并不知道此刻使用了文件名通配,因为shell会先把*.pm展开为一系列的文件名,然后再交给echo处理。
#以下程序只是简单地输出所有命令行参数
foreach $arg (@ARGV) {
              #程序不进行文件名统配,shell已经展开并传入@ARGV,perl只时是用数组而已
    print "One arg is $arg\n";
}
#我们在命令行执行以下命令
$ perl show_arg *.pm       
#打印
One arg is banery.pm 
One arg is fred.pm
One arg is dino.pm
  • 不过有时候需要在程序内部使用类似 ‘*.pm’ 的模式我们可以使用 glob 操作符;
  • glob操作符的效果和 shell 统配的结果完全相同。
#!/usr/bin/perl
my @all_file = glob '*';          #取得当前目录中的所有文件并按照字母进行排序,不包括以点号开头的文件   
my @pm_file  = glob '*.pm';       #得到的列表和之前使用的*.pm时的相同;
#如果要匹配不同的模式,可以在参数中用 空格 隔开各个模式
my @all_file = glob '.* *';       #取得当前目录中所有的文件并按照字符进行排序,包括以点号开头的文件

1.4 文件名通配的隐式语法

  • 在 glob 操作符出现之前,程序可以使用尖括号语法调用相同的功能,看起来和读取文件文件句柄类似;
#!/usr/bin/perl
my @all_perl = <*>;                   #效果和 my @all_file = glob '*'; 一致
#perl会把尖括号内出现的变量替换成它的值,类似于变量内插,这表示使用文件名通配之前,perl会把变量展开
my $dir = '/etc';
my @all_file = <$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值