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

现在咱们的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 ";