在生成数组后访问Perl中的数组项
您好,我想根据之前检查的条件访问特定的数组项。我把代码留在这里:在生成数组后访问Perl中的数组项,perl,mojolicious,Perl,Mojolicious,您好,我想根据之前检查的条件访问特定的数组项。我把代码留在这里: 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->checkPassw
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
对象的列表,以及找到第一个密码被签出的boss
我建议您将它们分成两个清除操作,List::Util
modulesfirst
操作符非常适合执行第二个任务
下面是它的外观。我已将方法调用的结果提取到变量$boss
中,以避免重复调用该方法
请注意,在检查数组大小时,不需要将标量
应用于数组。
和所有其他比较器无论如何都会施加标量上下文
我从您的问题中提取了很多代码,我有点担心您会提取$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 {
...;
}
}
您的
for
循环同时执行两件事:在@$groups
中生成My::Model::Group
对象的列表,并查找第一个密码已签出的boss
我建议您将它们分成两个清除操作,List::Util
modulesfirst
操作符非常适合执行第二个任务
下面是它的外观。我已将方法调用的结果提取到变量$boss
中,以避免重复调用该方法
请注意,在检查数组大小时,不需要将标量
应用于数组。
和所有其他比较器无论如何都会施加标量上下文
我从您的问题中提取了很多代码,我有点担心您会提取$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 {
...;
}
}
问题是什么?您的代码有什么问题?@ceving:OP希望找到
$pa
的值,该值的$valid\u pass
为1,以便他们可以使用该值提取更多信息。问题是什么?您的代码有什么问题?@ceving:OP希望找到$pa
的值,该值的$valid\u pass
为1,以便他们可以使用它提取更多信息。