关于将argv的使用转换为使用getopts的perl脚本的帮助

关于将argv的使用转换为使用getopts的perl脚本的帮助,perl,getopt,Perl,Getopt,我试图在perl脚本中使用Getopt::Std来转换@ARGV的用法。 我得到一些substr错误,需要一些帮助来解决这个问题 错误: Use of uninitialized value in substr at ./h.pl line 33. Use of uninitialized value in substr at ./h.pl line 33. substr outside of string at ./h.pl line 33. Use of uninitialized valu

我试图在perl脚本中使用
Getopt::Std
来转换@ARGV的用法。 我得到一些substr错误,需要一些帮助来解决这个问题

错误:

Use of uninitialized value in substr at ./h.pl line 33.
Use of uninitialized value in substr at ./h.pl line 33.
substr outside of string at ./h.pl line 33.
Use of uninitialized value in substr at ./h.pl line 33.
substr outside of string at ./h.pl line 33.
The 'month' parameter (undef) to DateTime::new was an 'undef', which is not one of the allowed types: scalar
 at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/DateTime.pm line 176
    DateTime::new('undef', 'HASH(0xb6932d0)') called at ./h.pl line 33
这是我的密码。(注释掉的代码是使用@ARGV的工作代码)

getopt,getopts-使用交换机群集处理单字符交换机

由于只允许使用单字符开关,
$opt{fd}
$opt{ld}
未定义

做你想做的事

use strict;
use warnings;
use Getopt::Long;

my $fd;
my $ld;

my $result = GetOptions(
    'fd=s' => \$fd,
    'ld=s' => \$ld,
);

die unless $result;

print "fd: $fd\n";
print "ld: $ld\n";
getopt,getopts-使用交换机群集处理单字符交换机

由于只允许使用单字符开关,
$opt{fd}
$opt{ld}
未定义

做你想做的事

use strict;
use warnings;
use Getopt::Long;

my $fd;
my $ld;

my $result = GetOptions(
    'fd=s' => \$fd,
    'ld=s' => \$ld,
);

die unless $result;

print "fd: $fd\n";
print "ld: $ld\n";

即使您认为Getopt::Std可以实现您想要的功能,也可以使用Getopt::Long。出于几乎相同的原因,您不只是手动滚动@ARGV处理程序

引用(部分)tchrist于:

我真的很喜欢Getopt::Long…我不能说太多关于它的好话来实现它应得的正义。。。唯一的问题是我用得不够。我打赌我不是一个人。似乎发生的事情是,首先我们只想添加-,比如说,一个小v标志。好吧,这很容易手工破解,我们当然会这么做。。。但就像任何其他软件一样,这些东西似乎都有一种过度增长其原始期望的方式。。。我相信,对于任何你能想到的工作来说,Long都是很棒的。它的缺失往往意味着,从长远来看,我没有使用它,为自己或他人做了更多的工作


即使您认为Getopt::Std可以实现您想要的功能,也可以使用Getopt::Long。出于几乎相同的原因,您不只是手动滚动@ARGV处理程序

引用(部分)tchrist于:

我真的很喜欢Getopt::Long…我不能说太多关于它的好话来实现它应得的正义。。。唯一的问题是我用得不够。我打赌我不是一个人。似乎发生的事情是,首先我们只想添加-,比如说,一个小v标志。好吧,这很容易手工破解,我们当然会这么做。。。但就像任何其他软件一样,这些东西似乎都有一种过度增长其原始期望的方式。。。我相信,对于任何你能想到的工作来说,Long都是很棒的。它的缺失往往意味着,从长远来看,我没有使用它,为自己或他人做了更多的工作


不久前的某个时候,我读到了另一篇博文,这篇博文呼应了这种情绪;您应该始终使用
Getopt::Long
来完成所有命令行选项的欺骗。我正在浏览互联网寻找链接,但也许其他人还记得?我曾在perlmonks(2008年)上引用过这一点,最近也可能在这里引用过。不久前的某个时候,我读了另一篇博客文章,与这种情绪相呼应;您应该始终使用
Getopt::Long
来完成所有命令行选项的欺骗。我正在浏览互联网寻找链接,但也许其他人还记得?我曾在perlmonks(2008年)上引用过,最近很可能在这里引用过。