1. UNIX文件系统中使用正斜杠(/)指定根目录,其后是由正斜杠隔开的子目录
如果定义了文件名,那它一定是路径的最后一部分
文件名和目录名都是大小写敏感的,有字母和数字字符构成,并且不允许出现空白符号
文件名中的点号(.)没有特殊意义,但可用于隔开基本文件名和扩展名
文件名的长度随着操作系统的不同而不同,最少可以是一个字符,而大多数UNIX文件系统的最大允许长度是255个字符。
只有根目录才能命名为/
2. Win32的文件系统主要包括FAT、FAT32、NTFS,它们使用与UNIX不同的规范规定目录路径
最基本的是FAT目录和文件都是通过反斜杠(\)而分割的,其名称是大小写敏感的
网络环境中,通用命名规范(UNC)使用不同的规范来分隔路径中的各部分,比如//mysever\dir\dir
在perl中,反斜杠\一般用作转义字符或引用字符(\n \t \U \$500)
因此,在规定Win32路径的分隔符时,经常需要使用双反斜杠
除非个别模块允许把单个反斜杠或路径名放在单引号候中,如C:\Perl\lib\File应当写作C:\\Perl\\lib\\File
3 File::Spec模块的设计目标是支持那些经常对文件名执行的可移植性
譬如,创建路径组件列表之外的单个路径,并针对相应操作系统应用正确的路径限定符
或者将路径拆分为卷、目录和文件名等
File::Spec::UNIX ;自动加载 by File::Spec 参考http://search.cpan.org/~smueller/PathTools-3.33/lib/File/Spec/Unix.pm
File::Spec::Mac
File::Spec::OS2
File::Spec::Win32 ;require File::Spec::Win32; # 只有指定时才加载 参考http://search.cpan.org/~smueller/PathTools-3.33/lib/File/Spec/Win32.pm
File::Spec::VMS
4 File::Spec函数
默认加载的有
canonpath
catdir
catfile
curdir
rootdir
updir
no_upwards
file_name_is_absolute
path
只有指定时才加载
devnull
tmpdir
splitpath
splitdir
catpath
abs2rel
rel2abs
case_tolerant
abs2rel: 根据目标路径和可选的起始路径,返回从起始路径到目标路径的相对路径\
$rel_path = File::Spec->abs2rel( $path ) ;
$rel_path = File::Spec->abs2rel( $path, $base ) ;
canonpath:不对文件系统进行物理检查,但是路径清楚给定的路径
catfile将一个或多个目录名与文件名相连,形成以文件名结尾的完整路径
$path = File::Spec->catfile( @directories, $filename );
catpath()根据卷、目录和文件部分,返回完整的路径。在UNIX系统中会忽略$volumn,只连接目录和文件。如果需要的话就插入/
$full_path = File::Spec->catpath( $volume, $directory, $file );
curdir返回表示当前目录的字符串,在UNIX上就是"."
$curdir = File::Spec->curdir();
devnull返回表示空设备的字符串,在UNIX上是"/dev/null"
$devnull = File::Spec->devnull();
file_name_is_absolute以路径为参数,如果它是一个绝对路径,则返回真
$is_absolute = File::Spec->file_name_is_absolute( $path );
join等同于catfile
no_upwards给出文件名列表,并去除指向父目录的引用
@paths = File::Spec->no_upwards( @paths );
path不接受任何参数,以数组形式返回环境变量
@PATH = File::Spec->path();
rel2abs将相对路径转换为绝对路径
$abs_path = File::Spec->rel2abs( $path ) ;
$abs_path = File::Spec->rel2abs( $path, $base ) ;
rootdir返回表示根目录的字符串,在UNIX上是"/"
$rootdir = File::Spec->rootdir();
splitpath将路径拆分为卷、目录和文件名等各个部分。在没有卷概念的文件系统上,对于卷则返回undef
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
tmpdir返回一个表示随后列表中第一个可写目录的字符串,如果没有可写的目录,则返回""
$tmpdir = File::Spec->tmpdir();
$ENV{TMPDIR}
$ENV{TEMP}
$ENV{TMP}
SYS:/temp
C:\system\temp
C:/temp
/tmp
/
updir返回表示父目录的字符串。在UNIX上是".."
$updir = File::Spec->updir();
catfile Concatenate one or more directory names and a filename to form a complete path ending with a filename
$path = File::Spec->catfile( @directories, $filename );
splitdir 与catdir相反
@dirs = File::Spec->splitdir( $directories );
5 如果没有指定操作系统的话,则针对当前操作系统加载File::Spec模块
没有评论:
发表评论