Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl:使用Getopt::Long设置Class::Struct字段?_Perl_Getopt - Fatal编程技术网

perl:使用Getopt::Long设置Class::Struct字段?

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 显然,我宁愿避免

我可以使用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]); }, ...);

另外,我更愿意将结构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'}
。保持选项名称和字段名称一致可以避免混淆。