在目录中移动
chdir '/etc' or die "cannot chdir to /etc: $!";
如果调用chdir时不加参数,Perl将尝试将工作目录设置成主目录。
文件名通配
my @all_files = glob '*'; my @pm_files = glob '*.pm';
如果一次匹配多种模式,可以在参数中用空格隔开各个模式
my @all_files_including_dot = glob '.* *' ;
在glob操作符之前,程序都是通过使用尖括号语法来调用此功能,看起来和读取文件句柄差不多:
my @all_files = <*> ; # 效果和这样的写法完全一致: my @all_files = glob '*';
Perl 会把尖括号出现的变量替换成它的值,类似于双引号变量的内插。
目录句柄
要特别注意.和..也在其中,因此,如果我们只想处理名称以pm结尾的文件,则可以在循环使用跳过这个函数:
while ( $name = readdir $dh) { next unless $name =~ /^./ ; .... }
文件和目录的操作
删除文件
在Perl里面,我们可以使用unlink操作符,并指定要删除的文件列表:
unlink 'slate','bedrock','lava'; unlink qw(slate bedrock lava);
unlink 参数是一个列表, glob 函数提供的正好是一个列表,因此可以一次性删除多个文件
unlink glob '*.o";
unlink的返回值代表成功删除的文件数目。
重命名文件
rename ‘old’,’new’;
链接与文件
建硬链接
link "chicken","egg" or warn "cann't link chicken to egg: $!";
创建一个软链接
sysmlink "dodgson" , "carroll" or warn "cann't symlink dodgson to carroll: $!";
要取得符号链接指向的位置,请使用readlink 函数,参数不是符号链接时返回undef
my $where = readlink "carroll"; my $perl = readlink "/usr/local/bin/perl";
两种链接都可以使用unlink 移除
创建和删除目录
创建目录通过调用mkdir函数即可:
mkdir 'fred',0755 or warn "cannot make fred directory: $!":
0755 八进制的数表示初始权限。
rmdir 移除空目录
my $temp_dir = "/temp/scratch_$$"; # $$ 由进程操作符决定 print "name:$temp_dir "; mkdir $temp_dir,0700 or die "cannot create $temp_dir: $!"; unlink glob "$temp_dir/* $temp_dir/.*"; rmdir $temp_dir;
如果临时目录里创建子目录,那么unlink操作会失败,rmdir也会跟着失败。
请参考Perl自带的File::Path 模块,里面的rmtree函数提供了完整的解决方案。
修改权限
chmod 755,'fred','barney'
chmod会返回成功更改的条目数量
修改隶属关系
chown函数修改一系列文件的拥有者以及所属组
my $user = 1004; my $group = 100; chown $use,$group,glob '*.o';
可以使用getpwnam函数将用户名转换成用户编号,再用相应的getgrnam 函数把用户组转换成编号:
defined(my $user = getpwnam 'merlyn' ) or die 'bad user'; defined(my $group = getgrnam 'users') or die 'bad group'; chown $suer,$group,glob '/home/merlyn/*';
修改时间戳
修改文件最近更改或访问时间,我们可以使用utime函数来更改。
my $now = time ; my $ago = $now - 24*60*60 ; # 一天的秒数 utime $now,$ago,glob '*';