是否停止运行此脚本解决方法,脚本运行速度减慢警告!

现在咱们的perl系列已经停止了6次知识点解说 , 并配以两次实例解说 , 本人是否已经也许本身写脚本了呢?
那么问题来了!在读取和天生文件过去 , 咱们需要果断目标文件是否存在 , 或者需要获取文件的权限等消息;另外 , 咱们也会对工作目次停止树立和删除等独霸 , 这就涉及到文件测试和目次独霸的问题了 。
《Perl零零8速成系列》(共8节课)主假设面向无Perl编程教育或者Perl措辞初学者 , 引见Perl的根蒂基础底细知识和适用编程技巧 。晨光与你1路 , 弥留点亮编程技术手段 , 1跃成为间谍级的Perl编程牛人!
【前情回顾回头】
《Perl零零8速成系列---数据结构入门》
《Perl零零8速成系列---哈希和子函数》
《化战败为怪异 , 编程措辞不可错过之正则剖明式》
《实例精解!若何从海量序列消息中提取目标序列》
《Perl零零8速成系列---字符串独霸与排序》
《适用案例精讲!若何用perl写1个截序列的脚本?》
《Perl 措辞输入、输出怎么写?管制结构若何用?看这1篇就够了!》
【本节模式】
本节模式包含Perl 措辞的文件测试和目次独霸 。
1、文件测试
1、文件测试独霸符
Perl 供应了1组用于测试文件的独霸符 , 借以返回特定的文件消息 。绝大多数测试独霸符返回布尔值 。例如 , 也许用 -e 测试独霸符测试文件是否存在 , -M 测试独霸符返回文件扫尾1次批改功夫到当前步伐启动功夫之间的天数 。代码以下:
die"Oops! A file called "$filename" already exists. " if (-e $filename);
#检测文件$filename是否存在
warn"Config file is looking pretty old! " if( -M CONFIG > 28);
#检测CONFIG文件扫尾1次批改功夫是否大于28天
这里咱们列出了常用的文件测试独霸符及其意义 , 供本人进修:
表1. 文件测试独霸符及其意义

2、栈式文件测试独霸符
假定咱们要1次测试多个文件属性(比喻可读、可写) , 也许别离做测试 , 例如:
【是否停止运行此脚本解决方法,脚本运行速度减慢警告!】if (-r $file and -w $file) { ... }
又或者:
if (-r $file and -w _) { ... }
此中下划线(_)是虚拟文件句柄 , 它会陈诉Perl用前次查问过的文件消息来做当前测试 , 多么也许节俭重复读取文件消息的功夫 。
假定也许1次实现多项属性的测试 , 那岂不是更麻烦?Perl 5.10开端许诺操作“栈式(stack)”写法将文件测试独霸符排成1行 , 同时停止多项属性的测试:
use 5.010;
if (-r -w -x-o -d $file) {
print "My directory is readable, writable, and executable! ";
}
3、stat函数
Perl下的stat函数和shell下的stat命令的依顺根蒂基础底细1致 , 也是得到文件的各类详细消息 。stat()函数返回1个数组 , 上面是数组各个元素的含义:
表2. stat返回格式及其含义

是否停止运行此脚本解决方法,脚本运行速度减慢警告!

文章插图

4、localtime函数
localtime函数依照它所在的上下文 , 也许用两种完全分歧的编制来运行 。在标量上下文中 , localtime函数返回1个格式化很好确当前功夫字符串:
表3. localtime返回格式及其含义

是否停止运行此脚本解决方法,脚本运行速度减慢警告!

文章插图

例如:
#!/usr/bin/perl
my ($sec,$min,$hour,$mday,$mon,$year)=(localtime)[0..5];
($sec,$min,$hour,$mday,$mon,$year)=(
sprintf("%02d", $sec),
sprintf("%02d", $min),
sprintf("%02d", $hour),
sprintf("%02d", $mday),
sprintf("%02d", $mon + 1),
$year + 1900
);
print "$year-$mon-$mday $hour:$min:$sec/n";
运行结果:
201七-11-1213:3七:31/n
2、目次独霸
Perl在默许环境下是在当前工作目次停止独霸 , 但是偶然候咱们渴想对工作目次停止变换 , 这时辰也许间接对目次停止独霸 。
1、在目次树中移动
咱们也许操作chdir 函数来切换当前工作目次 , 履行该独霸需要有充实权限 。
实例以下:
#!/usr/bin/perl
$dir="/home";
# 将当期目次移动到/home 目次下
chdir( $dir )or die "无奈切换目次到 $dir , $!";
print "你现在所在的目次为$dir ";
运行结果:
你现在所在的目次为 /home
2、体现部门的文件
假定咱们想体现当前目次下的部门文件 , 也许操作glob 独霸符来实现:
#!/usr/bin/perl
# 体现 /tmp 目次下的部门文件
$dir="/tmp/*";
my @files=glob( $dir );
foreach(@files ){
print $_ . " ";
}
3、目次句柄
假定咱们想从目次里得到文件名列表 , 还也许操作目次句柄:
#!/usr/bin/perl
opendir (DIR,".") or die "无奈翻开目次, $!";
# opendir翻开目次句柄DIR
while ($file=readdir DIR) {
#readdir获取目次中的文件列表
print "$file ";
}
closedir DIR;
#关闭目次句柄
4、树立和删除目次
咱们也许操作 mkdir 函数来树立1个目次或rmdir 函数删除1个目次 , 履行前你需要有充实的权限:
mkdir "fred", 0七55 or warn "Cannotmake fred directory: $!";
foreach my$dir (qw(fred barney betty)) {
rmdir $dir or warn "cannot rmdir $dir: $! ";
}
PS: 0七55体现目次创建时的初始权限
5、删除和重定名文件
咱们一般会对文件停止删除独霸 , 在Perl里面 , 咱们也许操作unlink函数来实现:
unlink "slate", "bedrock", "lava"; #删除三个文件
或者用qw()列出文件列表 , 即:
unlink qw(slate bedrock lava);
PS: unlink只能用来删除文件 , 不能用来删除目次 , 它的返回值代表胜利删除的文件数目 。
除此以外 , 咱们还也许用rename函数停止重定名独霸:
rename "old" "new"
6、批改权限和隶属干系
咱们知道Linux零碎中的chmod和chown命令 , 别离也许用来批改文件、目次的权限和隶属干系 。在Perl里面对应的chmod和chown函数也有一样的依顺 。
chmod 0七55,"fred", "barney"; #批改文件的权限为0七55
my $user=1004;
my $group=100;
chown $user,$group, glob "*.o"; #批改部门以".o"末端文件的领有者和所属组
PS: chomd和chown函数会返回胜利批改文件的个数
处置惩罚惩罚好输入问题是1个步伐畸形运行的次要条件 。这里我尽量精简的引见了思空见贯的文件测试和目次独霸 。因为篇幅无量 , 难以深入倒退说明 , 谨以此文 , 送与初入门Perl措辞的友好们 。
下1节课咱们来聊聊 , perl模块陈列与操作 , 敬请本人关注!
参考资料:

    推荐阅读