perl:使用Getopt::Long设置Class::Struct字段?
我可以使用Getopt::Long设置结构字段吗perl:使用Getopt::Long设置Class::Struct字段?,perl,getopt,Perl,Getopt,我可以使用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 显然,我宁愿避免
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]); }, ...);
另外,我更愿意将结构foo保留为数组,而不是散列。
\$foo->a
将引用$foo->a
的返回值,这肯定不是您想要的
您可能可以使用GetOptions
的功能将其传递给对象的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'}
。保持选项名称和字段名称一致可以避免混淆。