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

Extracting the name given as an argument from command line in Perl script

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

我这样调用 Perl 脚本

./perl.plx file.txt

我只需要得到那个 file 名字,而不是整个 file.txt

要获取文件名,您需要从 @ARGV 中提取文件名,并按点拆分。

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

解释:

split /\./, $ARGV[0] 在一个点上拆分(字符“.”是正则表达式中的一个特殊字符,它表示 'any character';要从字面上理解它,您需要对其进行转义,因此,/\./).

(...)[0];取第一个元素,即文件名。

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

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

您可以通过在命令提示符下键入 perldoc File::Basename 来查看 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 模块时,您可以利用这些工具中包含的最佳实践和调试。