0

这是我的情况:

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=./”

罗德里克

4

1 回答 1

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!";
# ...
于 2013-12-29T06:41:08.463 回答