【发布时间】:2022-01-14 18:37:12
【问题描述】:
在'options'示例的行中定义了一个HashRef属性。
has 'clsHsh' => (
traits => ['Hash'],
is => 'rw',
isa => 'HashRef[Str]',
default => sub {{}},
handles => {
set_clsHsh => 'set',
get_clsHsh => 'get',
has_no_clsHsh => 'is_empty',
num_clsHsh => 'count',
delete_clsHsh => 'delete',
clsHash_pairs => 'kv',
},
);
sub parseCls2()
{
my ($self,$line) = @_;
#input $line format is as follows
#$line = qq<Class att1=val1 att2=val3.../>)
#gather all key value pairs sans <Class
$line =~ s/<Class(.*)\/>/$1/g;
# split on space and take the resulting array
# split that on =. Simply equating to hash will convert
# key1,val1,key2,val2... to hash of key and value.
my %l4_sh = map {split /=/} split / /,$line;
$self->{clsHsh} = \%l4_sh;
return $self->{clsHsh};
}
#
# example of parsing a line
#
my $line = qq(<Class Cls="Bid" description="bid" low="" high=""/>)
;
my $h = $parser->parseCls2($line);
my %h1 = %$h;
while (my ($k,$v) = each %h1) {
say "key = $k and value = $v"
}
我能够使用解析 $line 输入参数并将解析值存储在哈希中的子来填充 clsHsh 属性。 我的问题,
- 有没有办法重新利用 set_clsHsh 而不是使用 sub?
- 推荐的方式是什么?
【问题讨论】:
-
“重新利用 set_clsHsh” “重新利用”是什么意思?
-
我使用 sub parse($line) 来填充 clsHsh。我可以改用 set_ClsHsh 吗?如果有,怎么做?
-
请编辑您的问题。添加一个完整的可运行示例。你的
parse()如何访问clsHash? set_clsHsh 的唯一目的是设置此哈希中的元素:$obj->set_clsHsh($key,$val)