生成数组后访问 Perl 中的数组项
Access an array item in Perl after generating that array
您好,我想根据先前检查的条件访问特定的数组项。我把代码留在这里:
elsif (scalar(@{$boss->bosses}) > 1) {
foreach my $pa (@{$boss->bosses}) {
my $p = My::Model::Group->new(id => $pa->group_id);
push(@$groups, $p);
$valid_pass = 1 if ($pa->checkPassword($self->param('password')));
}
if ($valid_pass) {
my $pa_id = $pa->id;
my $pa_partner_id = $pa->group_id;
}
else {
}
}
我想做的是,如果在出现的数组中,我检查密码是否正确,如果正确,那么我想获取 id 和 group_id数组项以在函数中使用它以便能够登录。
你的 for
循环同时做两件事:在 @$groups
中生成 My::Model::Group
个对象的列表,并找到第一个检查密码的老板。
我建议您将它们分成两个明确的操作,List::Util
模块 first
操作符非常适合第二个任务
这是它的样子。我已将方法调用 $boss->bosses
的结果提取到变量 $bosses
中以避免重复调用方法
请注意,在检查数组大小时不需要对数组应用 scalar
。 >
和所有其他比较器无论如何都强加标量上下文
我已经从你的问题中提取了大部分代码,我有点担心你提取了 $pa_id
和 $pa_partner_id
的值然后丢弃它们。但我想你知道你真正想在这里做什么
use List::Util 'first';
my $bosses = $boss->bosses;
if ( ... ) {
...;
}
elsif ( @$bosses > 1 ) {
@$groups = map { My::Model::Group->new( id => $_->group_id ) } @$bosses;
my $password = $self->param( 'password' );
my $pa = first { $_->checkPassword( $password ) } @$bosses;
if ( $pa ) {
my $pa_id = $pa->id;
my $pa_partner_id = $pa->group_id;
}
else {
...;
}
}
您好,我想根据先前检查的条件访问特定的数组项。我把代码留在这里:
elsif (scalar(@{$boss->bosses}) > 1) {
foreach my $pa (@{$boss->bosses}) {
my $p = My::Model::Group->new(id => $pa->group_id);
push(@$groups, $p);
$valid_pass = 1 if ($pa->checkPassword($self->param('password')));
}
if ($valid_pass) {
my $pa_id = $pa->id;
my $pa_partner_id = $pa->group_id;
}
else {
}
}
我想做的是,如果在出现的数组中,我检查密码是否正确,如果正确,那么我想获取 id 和 group_id数组项以在函数中使用它以便能够登录。
你的 for
循环同时做两件事:在 @$groups
中生成 My::Model::Group
个对象的列表,并找到第一个检查密码的老板。
我建议您将它们分成两个明确的操作,List::Util
模块 first
操作符非常适合第二个任务
这是它的样子。我已将方法调用 $boss->bosses
的结果提取到变量 $bosses
中以避免重复调用方法
请注意,在检查数组大小时不需要对数组应用 scalar
。 >
和所有其他比较器无论如何都强加标量上下文
我已经从你的问题中提取了大部分代码,我有点担心你提取了 $pa_id
和 $pa_partner_id
的值然后丢弃它们。但我想你知道你真正想在这里做什么
use List::Util 'first';
my $bosses = $boss->bosses;
if ( ... ) {
...;
}
elsif ( @$bosses > 1 ) {
@$groups = map { My::Model::Group->new( id => $_->group_id ) } @$bosses;
my $password = $self->param( 'password' );
my $pa = first { $_->checkPassword( $password ) } @$bosses;
if ( $pa ) {
my $pa_id = $pa->id;
my $pa_partner_id = $pa->group_id;
}
else {
...;
}
}