从Perl脚本中的命令行提取作为参数给出的名称

时间:2017-03-04 22:58:21

标签: bash perl shell command-line command-line-arguments

我是脚本语言的新手,我有一个任务,说我需要从erl命令行中的给定参数中提取名称。

我正在调用像这样的Perl脚本

./perl.plx file.txt

我需要只获取file名称,而不是整个file.txt

2 个答案:

答案 0 :(得分:5)

Perl脚本的命令行参数显示在@ARGV中,perldoc perlvar中描述。

解析文件名似乎微不足道,但外观可能会产生误导。但是,Perl附带了一个名为File::Basename的模块,可以处理您可能不会立即考虑的边缘情况。简单split无法处理的一个边缘情况是,除了最终后缀之外,点可能出现在文件名的其他位置。

您可以在命令提示符下键入File::Basename来查看perldoc File::Basename的文档。

以下是一个例子:

use stict;
use warnings;
use File::Basename qw(fileparse);

my ($fname, $dirs, $suffix) = fileparse($ARGV[0], qr/\.txt/);

print "Base file name is $fname\n";
print "Suffix is $suffix\n";
print "Path to $fname$suffix is $dirs\n";

由于此模块附带Perl,因此您无需安装任何内容即可使用它。利用每个Perl发行版附带的核心Perl模块,您可以利用这些工具中包含的最佳实践和调试。

答案 1 :(得分:0)

要获取文件的名称,您需要从@ARGV中提取它,并将其拆分为点。

my $fileName = (split /\./, $ARGV[0])[0];

阐释:

split /\./, $ARGV[0]在一个点上分裂(字符“。”是正则表达式中的一个特殊字符,它表示'任何字符';要字面意思,你需要将其转义,因此,{{1} })。

/\./获取第一个元素,即文件名。