如何用Perl解析简单的命令行选项?

如何用Perl解析简单的命令行选项?,perl,Perl,当我使用命令行输入运行Perl文件时,它应该更新表中的一个字段 比如说 perl function_impl.pl --address_only 如果它接收到输入参数--address\u only,则t应仅更新该Perl脚本数据库中的地址字段。如何实现此操作。如果脚本接受零个或一个参数,则可以执行以下操作: if( $#ARGV == 0 ) { # one argument passed if($ARGV[0] eq '--address_only') {

当我使用命令行输入运行Perl文件时,它应该更新表中的一个字段

比如说

perl function_impl.pl --address_only

如果它接收到输入参数
--address\u only
,则t应仅更新该Perl脚本数据库中的地址字段。如何实现此操作。

如果脚本接受零个或一个参数,则可以执行以下操作:

if( $#ARGV == 0 ) {     # one argument passed
        if($ARGV[0] eq '--address_only') {
                # --address_only passed
        } else {
                # something else passed
        }
}elsif( $#ARGV == -1 ) { # no argument passed

}else{                   # more than one arg passed

}
是Perl中解析命令行参数的一种非常常见且非常简单的方法

my %args = ();
GetOptions (\%args, 'address_only');       # will store true value in $args{address_only}

if ($args{address_only}) {
    # Update address
}
请向我们展示您用于更新表的代码,以便我们可以在您需要时提供该部分的帮助

另外,您将如何提供更新值?从您的示例来看,您不会通过命令行提供它,所以我假设它是硬编码的?如果要在命令行上提供,请更改上述代码以接受参数值:

my %args = ();
GetOptions (\%args, 'address_only=s'); # will store address value in $args{address_only}
# Usage: function_impl.pl --address_only joe@myaddress.com
作为一个简单的示例,您可以构建update语句的“SET”部分:

my $set_fields = 0;
if ($args{address_only}) {
    $set_fields .= ", " if $set_fields; # comma separate if >1 set
    $set_fields .= qq[address = "$args{address_only}"];
    # or $set_fields .= qq[address = "$hardcoded_address"];
}
# Build the full UPDATE SQL statement using $set_fields
# Execute SQL statement

到目前为止你试过什么?哪一部分给你带来麻烦?命令行选项?DB更新?还有,你将如何提供更新值?还有,在人们为你回答的两个问题中,你甚至没有投票或接受一个答案。继续这样做,人们就不会急于回答您的问题。您也从未回答过我有关更新值和数据库详细信息的问题。
@ARGV
手动解析根本不可扩展。应始终使用用于选项解析的CPAN模块(Getopt::Std或Getopt::Long)来提供可伸缩性(更不用说可读性了)。如果确实需要参数的数量,为什么要选中
$\ARGV
?这在
@ARGV
中提供,没有逐个关闭的问题。