如何检查参数是否同时包含文件名和路径,或仅包含文件名

时间:2016-08-31 14:18:35

标签: perl

用户输入可以只是一个文件名/文件名,其中包含文件所在的路径 存在。这是用户唯一的两个选项。

use File::Basename qw(dirname basename);

my $input = <STDIN>;
my $file = basename($input);
my $path = dirname($input);

每当用户只提供文件名时,我就会获得路径为。(DOT - 当前目录)。该文件不存在于该路径中。对我来说,如果用户没有提供路径,则意味着我从特定目录中选择它。

我目前正在使用粗略的逻辑来检查$ path的长度,以查看是否给出了路径。

有没有其他方法我可以使用它告诉路径是否被提及。任何输入都非常有用。

3 个答案:

答案 0 :(得分:1)

您可以检查用户发送的文件是否存在(并且是文件)。如果没有,请在文件前添加自定义目录:

use warnings;
use strict;

use File::Basename qw(dirname basename);

my $input = <STDIN>;
chomp $input;

my $file = basename($input);
my $path = dirname($input);

my $custom_dir = '/path/to';

if (! -f $input){
    print "$custom_dir/$file\n";
}
else {
    print "$input\n";
}

答案 1 :(得分:1)

您可以检查/中是否有$input

use File::Basename qw(dirname basename);

my $input = <STDIN>;
my ($file, $path);

if ($input =~ m{/}) {
    $file = basename($input);
    $path = dirname($input);
} else {
    $path = '/foo/bar/';
    $file = $input;
}

答案 2 :(得分:0)

我会说:

if ( -f $input ) { 
   #it's a file that exists, so the path is probably right
}

或者,您可以只测试$path eq '.'是否可以?

相关问题