Perl 学习笔记-目标操作
1.在目录树中移动.
程序运行时会以当前工作目录作为相对路径的起点, 可以使用 chdir 操作符改变当前目录:
chdir "/etc" or die "Can't chdir to /etc:$!"; #因为这是一个相对操作系统的调用, 所以错误信息会返回到 $! 中.
由Perl程序启动的所有进程都会继承Perl程序的工作目录. 但对于启动Perl的进程,它的工作目录不会随Perl工作目录的改变而改变, 所以无法写出任何Perl程序来代替Shell里的cd命令.因为一旦退出Perl程序, 又会回到开始的工作目录.
如果省略参数, 将回到用户主目录, 这是少数不以$_作为默认参数的情形之一.
2. 文件通配名(globbing)
命令行里: shell会将命令行里的文件名模式展开成所有匹配的文件名, 称为文件名通配, 如 echo *.txt 名令echo并不知道如何展开*txt, 因为shell会将它展开, 在Perl中也同样适用.
Perl程序中: 适用 glob 操作符进行文件名通配. my @all_files = glob "*"; #所有文件 my @pm_files = glob "*.pm";
glob 不会匹配以 . 号开头的文件名, 任何能在命令行上键入的模式都能作为参数交给glob处理, 如果要一次匹配多种模式,可以在参数中用空格隔开各个模式: my @all_files_including_dot=glob ".* *";
在glob操作符之前的方式: 使用尖括号语法 my @all_files=<*>; 和双引号字符串内插的情形类似, 尖括号内的变量也会被替换为当前变量的值, 然后按照文件名通配展开成对应的文件名列表.
my $dir="/etc";
my @dir_files=<$dir/* $dir/.*>;
联想到<STDIN>表示从文件句柄读取, 那么Perl怎么区分是文件名通配还是从文件句柄读取呢? => 规则: 如果尖括号内是满足Perl标识符条件的,就作为文件句柄读取, 否则代表使用文件名通配操作.
my @files = <FRED/*>; ## glob
my @lines = <FRED>; ## 从文件句柄
my $name = "FRED";
my @files = <$name/*> ## glob
my @files2 = <$name> ## $name是简单标量变量, 不是数组或哈希, 所以也是对文件句柄的读取,Perl是在编译时确定的, 所以和变量的内容无关
3. 目录句柄
与文件句柄类似, 只是操作符和内容不同
使用 opendir 代替文件句柄操作符 open
使用 readdir 代替文件句柄操作符 readline
使用 closedir 代替文件句柄操作符 close
读取到的是目录里的文件名和子目录名 , 而不是文件的内容.
my $dir_to_process = ".";
opendir DH, $dir_to_process or die "Can't! $!\n";
foreach $file(readdir DH){
print "$file\n";
}
closedir DH;
和文件句柄一样, 目录句柄会在程序结束时自动关闭, 也会在用这个句柄再打开另一个目录前自动关闭.
4.文件操作
删除:在Perl中使用 unlink 操作符来将文件放入碎纸机,类似于Linux中的rm命令,参数是列表,返回成功地删除了多少个文件,可以配合通配符glob使用,实现一次删除多个文件。执行失败时信息保存在变量 $!
重命名: rename 函数,类似mv命令,参数为列表。执行失败返回假,信息保存在$!中,通常使用 or die(或 or warn)来报告
5.建立和删除目录(每次只能操作一个)
建立目录 mkdir ,可以在创建目录时指定权限,如果权限是字符串,要用otc函数处理
my $name = "roger";
my $perssions = "0755";
mkdir $name , oct($perssions) or warn "Can't make directory $name : $!";
删除目录 rmdir ,删除非空目录将会失败。可以先用unlink删除目录里面的目录。创建临时目录最好包含当前进程标识符,这个代号放在 $$ 变量中,这么做什可以防止和别的进程冲突。
删除目录树:使用模块 File::Path
use File::Path qw(make_path remove_tree); # 创建任意深度的目录树
# make_path($dir1,dir2,...)
make_path('roger/bar/zoo','rog/dsd');
make_path("roger/bar/zar","roger/dst/r",{ #实际过程中是一层一层创建的
verbose => ,
error => \my $roger, #为什么要使用反斜杠
mode => ,
}); # 删除任意深度的目录树,如果目录非空会先unlink文件
remove_tree('roger/bar/zar','roger/dst/r',{
verbose => ,
error => \my $err_list,
});
修改文件或目录权限: chmod
更改隶属关系: chown
修改时间戳: utime :可以修改某个文件的最近访问时间来造假
Perl 学习笔记-目标操作的更多相关文章
- perl学习笔记——目录操作
在目录书中移动 chdir 操作副改变当前的工作目录.它和shell中cd命令类似: chdir ‘/etc’ or die “cannot chdir to /etc:$1”; 注意:工作目录不能更 ...
- Javascript学习笔记二——操作DOM
Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...
- MongoDB学习笔记:Python 操作MongoDB
MongoDB学习笔记:Python 操作MongoDB Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...
- Javascript学习笔记三——操作DOM(二)
Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...
- perl学习笔记之:正则表达式
Perl 中的正则表达式 正则表达式的三种形式 正则表达式中的常用模式 正则表达式的 8 大原则 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过 ...
- Perl 学习笔记-列表和数组
笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...
- Perl 学习笔记-标量数据
最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...
- Perl 学习笔记-高级控制结构
1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码; unless(<condition>){code...;} 等价于 if(<con ...
- Perl 学习笔记-正则表达式处理文本
1.使用正则表达式替换文本 s/// s/<pattern>;/<replacement>;/ 如果匹配失败, 则什么也不会发生, 变量也不受影响. 返回布尔值, 替换成功 ...
随机推荐
- Appium+python自动化25-windows版appium_desktop_V1.7.1
appium_desktop_v1.2.6 1.appium_desktop在github上最新下载地址:releases/tag/v1.2.6 2.下载后傻瓜式安装,然后启动appium,这个界面跟 ...
- 【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)
题目 传送门:QWQ 分析 人类智慧题,不会做...... 详细题解1 详细题解2 总体思路是考虑四边形 讨论凹四边形凸四边形,最后加一个单调性优化省掉个$ O(n) $ 代码 代码感觉好短 ...
- ThinkPHP 目录结构
2.0 ThinkPHP 目录结构 在前面的博客中,通过一个简单的案例向大家演示了在ThinkPHP 框架下开发的大致法程,本篇博客将对ThinkPHP框架目录结构进行详细讲解. 要想在项目中熟练地使 ...
- StringsUtil字符串工具类---灵活截取
package com.js.ai.modules.pointwall.interfac; import javax.print.attribute.standard.MediaName; publi ...
- SQL Server 2008系统信息查询常用命令 查看表大小、记录数等
1.返回所有数据库信息(数据库名,创建日期,存储路径等). use master; GO select * from dbo.sysdatabases 2.返回当前数据库所有对象(可根据type字 ...
- Spring中application*的使用
ApplicationAware 加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时, ...
- Windbg在.net性能问题排查hang情况的应用思路
1.使用~*kb 2000 查看本地锁的callstack情况,有sleep的线程关注是否占用锁,有wait等待的线程可能是正在等待锁资源. 2.使用~*e!clrstack 查看.net的calls ...
- ListBox绑定一个对象
转自原文 C#中ListBox的Items属性是Object对象,如何显示该对象的别名 而真正的则保存在其他的地方 一般是datasource 绑定一个list对象 list 可以是 自定义类型的对象 ...
- 构建一个完整的DNS系统
人心不同 各如其面 如之奈何 如之奈何 ——引子 我们的目标很明了——构建一个具有根的.私有的DNS(Domain Name System). 这里不会陈述太多关于DNS与BIND的基础知识,如果 ...
- 虚拟化 - kvm安装
vmware centos6.5 64位 kvm虚拟化安装配置 安装 centos 64位 1.推荐配置 内存 2G 硬盘50G,或者再单独分一个磁盘,用来存储虚拟机文件 最关键的一步,在创建虚拟机时 ...