我是脚本语言的新手,我有一个任务,说我需要从erl命令行中的给定参数中提取名称。
我正在调用像这样的Perl脚本
./perl.plx file.txt
我需要只获取file
名称,而不是整个file.txt
答案 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} })。
/\./
获取第一个元素,即文件名。