全部学习汇总: GreyZhang/perl_basic: some perl basic learning notes. (github.com)
不管是用Perl还是Python,之前写代码的时候遇到需要进行目录的创建或者删除指令的时候我通常会直接调用Windows的相关命令或者使用移植过来的bash shell命令。其实,看完小骆驼中的介绍后,后期用到这些功能的时候我想我大概还是会采用这样的方式吧!不过,从考虑软件的可移植性上考虑,确实应该使用Perl的内置功能。或者,能够兼顾使用的方便与移植,使用Perl的File::Path模块库。
目录创建的功能,Perl中提供了一个函数mkdir。与我自己常用的Windows CMD的同名命令不一样的地方我用到的主要有两点。
- 传入参数不同。Perl中的mkdir传入参数有两个,第一个参数是目录名,第二个参数是这个目录的权限设置。而在Windows的命令中,传入参数可以是多个,是一个待创建的目录列表,这种方式我非常喜欢,以为很多目录同时创建的时候只需要一条命令。
- 在Windows下,对目录或者文件设置各种权限似乎意义不大。我个人的理解,不同的操作系统有不同的运行机理,而Windows平台本身就不是那种基于文件的操作系统。
在Perl中,创建一个新的目录时也可以把第二个参数省略,至少在Windows下我做相关的测试没有发现有什么问题。写一个简单的测试如下:
在一个没有子目录的文件夹中执行效果如下:
Perl中的目录删除功能与Linux中接触到的bash功能相似,至少从行为上来看多少有些相似。在不加任何参数的时候,rmdir只能够删除空目录。如果目录中有文件的时候,可以结合unlink使用,先删除目录中的文件然后执行目录的删除。不过,如果目录中存在子目录这个组合使用的方式依然会失败。至于解决的方案,就是开篇中提到的File::Path模块,rmtree可以实现这种一步到位的处理功能。这像极了Python中的shutil模块的几个功能。