Jan*_*kie 3 arrays perl hash perl-data-structures
我是复杂数据结构的新手.我有点理解他们背后的想法,但是在获取数据方面遇到了一些困难.我通过使用Data :: Dumper找到了当前问题孩子的结构....
$VAR1 = {
'4' => {
'engine_coded' => 0,
'name' => 'FILTER_1',
'filter_actions' => {
'X_Override_Queue_Level' => 'Value'
},
'filter_criteria' => [
[
'X_Charge',
'=',
'X_CHARGE_1'
]
]
}
};
Run Code Online (Sandbox Code Playgroud)
我需要做的是确保给定一个过滤器名称(在本例中为"4"),"name"有一个值,以及"filter_actions"和"filter_criteria".
任何人都知道如何最好地完成这个?非常感谢!珍妮
让我们分解成碎片......
首先,创建一个验证结构的函数:
sub validate
{
my ($data) = @_;
# always return true for now
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在让我们开始填写这些位...你想使用过滤器名称作为验证检查的一部分,所以让我们将其作为参数添加:
sub validate
{
my ($data, $filter_name) = @_;
# always return true for now
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在做任何其他事情之前,检查过滤器名称是否作为键存在是有意义的; 如果没有,验证失败:
sub validate
{
my ($data, $filter_name) = @_;
return if not exists $data->{$filter_name};
# otherwise, return true
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在还检查是否有值.由于散列键中的定义是'exists'的超集(定义的任何值也必须存在,但不是每个需要定义的值 - 因为undef可能是值),可以省略第一个检查:
sub validate
{
my ($data, $filter_name) = @_;
return if not defined $data->{$filter_name};
# otherwise, return true
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我们已经检查过filter_name键是否存在于数据中并且已经定义,但在深入查看一个级别之前,我们需要确认它确实是一个hashref:
sub validate
{
my ($data, $filter_name) = @_;
return if not defined $data->{$filter_name};
return if ref $data->{$filter_name} ne 'HASH';
# otherwise, return true
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在在过滤器名称下查找"filter_actions"和"filter_criteria"键:
sub validate
{
my ($data, $filter_name) = @_;
return if not defined $data->{$filter_name};
return if ref $data->{$filter_name} ne 'HASH';
return if not defined $data->{$filter_name}{filter_actions};
return if not defined $data->{$filter_name}{filter_actions};
# otherwise, return true
return 1;
}
Run Code Online (Sandbox Code Playgroud)
而已!请务必阅读perldoc perlreftoot,perldoc perlref和perldoc perldsc中使用perl数据结构的内容.
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |