我希望能够以两种方式之一运行我的脚本:
perl script.pl file
perl script.pl -v file
我知道该怎么做
perl script.pl -v -f file
但我想在不需要 -f 文件的情况下做到这一点。
我希望能够以两种方式之一运行我的脚本:
perl script.pl file
perl script.pl -v file
我知道该怎么做
perl script.pl -v -f file
但我想在不需要 -f 文件的情况下做到这一点。
使用后GetOpt
,剩下的@ARGV
就是你的位置参数了。你只需要使用$ARGV[0]
“文件”。
use Getopt::Long;
my $verbose = 0;
my %opts = ( 'verbose' => \$verbose );
GetOptions(\%opts, 'verbose|v') or die "Incorrect options";
my $file = $ARGV[0];
die "You must provide a filename" unless length $file;
您可以使用Getopt::Long 的参数回调:
use Getopt::Long;
my $file;
GetOptions(
'v' => \my $v,
'<>' => sub { $file = shift },
);
print "\$v: $v\n";
print "\$file: $file\n";
命令perl script.pl -v foo.txt
输出:
$v: 1
$file: foo.txt
Getopt::Long解析(默认情况下)其中的项目@ARGV
并在处理时一个接一个地删除这些项目@ARGV
。完成后Getoptions
,剩下的第一项@ARGV
将是文件名:
use warnings;
use strict;
use Getopt::Long;
my $verbose;
GetOptions (
'v' => "\$verbose",
) or die qq(Invalid arguments passed);
my $file = shift; #Assuming a single file. Could be multiple
if ( $verbose ) {
print "Do something verbosely\n";
}
else {
print "Do it the normal way...\n";
}
没有什么特别的需要。您允许GetOptions
处理-v
参数(如果存在),并且您允许@ARGV
包含执行完成后留下的所有参数GetOptions
。
顺便说一句,你可以这样做:
GetOptions (
'verbose' => "\$verbose",
) or die qq(Invalid arguments passed);
你可以使用:
perl script.pl -v file
或 perl script.pl -verbose 文件
或者
perl script.pl -verb file
因为,默认情况下,GetOptions
将自动缩写参数并找出用户试图传递的参数。
我强烈建议您查看文档并尝试一下。会有很多对你来说不太有意义的东西,但这可能是新 Perl 程序员开始使用的最早的模块之一,它充满了各种各样的简洁的东西。
随着你技能的发展,你会继续回顾并重新阅读文档,因为随着你对 Perl 理解的增加,你会在这个模块中发现新的东西。