【问题标题】:perl: use Getopt::Long to set Class::Struct fields?perl:使用 Getopt::Long 设置 Class::Struct 字段?
【发布时间】:2012-08-23 13:15:55
【问题描述】:

我可以使用 Getopt::Long 设置结构字段吗?

use strict;
use diagnostics;
use Getopt::Long;
use Class::Struct foo [ a => '$', b => '$' ];

my $foo = foo->new();
GetOptions("a=i" => \$foo->a, "b=i" => \$foo->b);

似乎不起作用,“-a 10”似乎没有设置$foo->a

显然,我宁愿避免

GetOptions("a=i" => sub { $foo->a($_[1]); }, ...);

另外,我宁愿将 struct foo 保留为数组,而不是哈希。

【问题讨论】:

    标签: perl getopt


    【解决方案1】:

    \$foo->a 将引用$foo->a 的返回值,这肯定不是你想要的。

    您可能可以使用GetOptionsstore the values in a hash reference 的能力,然后将其传递给您的对象的new

    my $opt = {};
    GetOptions($opt, 'a=i', 'b=i', ...)
    my $foo = foo->new(%$opt);
    

    【讨论】:

    • 如果我的字段类似于“foo_bar_baz”而选项类似于“--foo-bar-baz”怎么办?
    • 当我使用Getopt::Long 时,我只是将所有选项值存储在%Opt 中,并且键与选项名称匹配。所以我会打电话给GetOptions(\%Opt, 'foo-bar-baz=i'),然后参考$Opt{'foo-bar-baz'}。保持选项名称和字段名称一致可以避免混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多