perl脚本在运行时取得当前目录
在脚本中经常需要得知相关的目录信息,通常是与文件i/o相关,或者是在其通过crontab模式下运行时需要知道这些信息,从而让其记录正确的信息或其它。在crontab中,脚本的当前工作目录通过都不在其目录下,而是在该用户的家目录或crontab的工作目录(/var/spool/clientmqueue)下,因此,你可能需要强制让程序在你声明的路径下才能工作,通常借用'chdir'来实现。下面的脚本在运行时,其工作的目录并不一定是所在的目录。
use Cwd qw( abs_path );
use File::Basename qw( dirname );
say dirname(abs_path($0));
将得到脚本所在的绝对目录。
or
use Path::Class qw( file );
say file($0)->absolute->dir;
Path::Class - Cross-platform path specification manipulation for Perl.使用这个模块,对跨平台取得绝对路径很好用。
or
use Cwd qw( abs_path );
use Path::Class qw( file );
say file(abs_path($0))->dir;
其实有上面的脚本,再使用'Cwd'模块显得有些多余。
Cwd,File::Basename这两个模块属于核心类,一般不用安装,使用其一都可以达到目的;而'Path::Class'则需要从cpan上另外安装。
也可以直接'use cwd() instead of abs_path':
use Cwd qw();
my $path = Cwd::cwd();
print "$path\n";
Or abs_path without an argument:
use Cwd qw();
my $path = Cwd::abs_path();
print "$path\n";
任意取得文件所在的绝对路径:
use File::Basename qw();
my ($name, $path, $suffix) = File::Basename::fileparse($0);
print "$path\n";
Cwd docs
File::Basename docs