Perl fileparse路径名

时间:2013-12-29 06:24:02

标签: perl fileparse

以下是我的情况:

use strict;
use Cwd;
use Getopt::Long;
Getopt::Long::Configure('pass_through');
use File::Spec;
use File::Basename;

1) -out=/some/place/some_filename.txt
2) -out=/some/place/
3) -out=some_filename.txt

任何用户都可以在上面给出任何'-out ='。我对路径名感兴趣,因为我必须检查目录是否可写以创建/覆盖日志文件,如果目录不可写则退出并发出警告。

如果-out =是选项1,那么fileparse将给我'/ some / place',我可以-w了。

如果-out =是选项2,那么我可以只使用-d和-w,然后附加一个默认文件名。类似于'/some/place/default_filename.txt'

如果-out =是选项3,我必须将'my $ cwd'附加到文件名。像'/current/working/dir/some_filename.txt'

这样的东西

请求的文件可能预先存在,也可能不存在。文件名可能是.log或.txt或.dat或根本没有扩展名,具体取决于用户的心血来潮,我必须根据需要创建/覆盖该文件。

所以我对这里经验丰富的Perl战术家的问题,因为-out =将在用户与用户之间不确定,提取路径名的最佳方法是什么?我可以'if(-d $ out)',但是如果用户只提供了文件名怎么办?我可能会很幸运,用户可能会提供完整的路径/文件名,或只是目录路径。或者用户可能对将其数据放在当前工作目录中并且仅给出文件名感到满意。我在fileparse中插入了一个文件名并得到:“$ path =。/”

罗德里克

1 个答案:

答案 0 :(得分:1)

您可以简单地检查您的参数是否是目录(-d $out),并在这种情况下为其添加默认文件名。然后,你需要检查结果文件是否可写,如果不是,则需要挽救:

$out .= "/default_filename.txt" if -d $out;
die "File $out is not writable!" unless -w $out;
# everything ok, create file at $out:
open FILE, ">", $out or die "Cannot open $out for writing!";
# ...