gpt4 book ai didi

perl - 如何使用 Getopt::Long[::Descriptive] 处理由任意数字组成的选项?

转载 作者:行者123 更新时间:2023-12-04 10:02:58 30 4
gpt4 key购买 nike

我希望能够处理类似 -1 的选项或 -10类似于 head-tail做。

换句话说,能够做到

my_script.pl -10 --some-other-option arguments

并且能够保留 -10的值选项。

现在唯一可行的想法是在将命令行输入到 describe_options 之前处理它,如下所示:

my ($count) = map { /\-(\d+)/; $1 } grep { /^\-(\d+)$/ } reverse @ARGV;
@ARGV = grep { !/^\-\d+$/ } @ARGV;

my ($opt, $usage) = describe_options(...)

但它看起来很笨重,而且在 $usage 中没有弹出该选项.

有没有更好的办法?使用 Getopt::Long 的答案也可以使用 - 我可以将它们调整为 GetOpt::Long::Descriptive

最佳答案

Getopt::Long (不确定 Getopt::Long::Descriptive )可以配置为在未知参数上调用用户提供的函数;这可用于处理此类情况。

例子:

#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/say/;
# :config required to enable handling of "<>" psuedo-option
use Getopt::Long qw/:config pass_through/;
use Scalar::Util qw/looks_like_number/;

my $verbose = 0;
my $lines = 10;
GetOptions("verbose" => \$verbose,
"<>" => \&parse_lines)
or die "Unable to parse options.\n";
say "Lines is $lines";

sub parse_lines {
my $arg = shift;
if (looks_like_number $arg) {
$lines = $arg =~ s/^-//r; # Turn -X into X
} else {
die "Invalid option '$arg'\n";
}
}

和用法:

$ perl foo.pl -123
Lines is 123
$ perl foo.pl --bar
Invalid option '--bar'
Unable to parse options.

关于perl - 如何使用 Getopt::Long[::Descriptive] 处理由任意数字组成的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61745423/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com