生成该数组后,访问Perl中的数组项目



您好,我想在先前检查的条件下访问特定的数组项目。我在这里留下代码:

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 and group_id of the array项目使用能够将它们登录的函数。

您的 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 {
        ...;
    }
}

最新更新