2017-05-02 25 views
0

你好我想訪問基於先前檢查條件的特定數組項。我離開這裏的代碼:生成該數組後,在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使用它的功能,能夠登錄他們

+0

什麼問題?你的代碼有什麼問題? – ceving

+0

@ceving:OP希望找到'$ valid_pass'爲1的'$ pa'的值,以便他們可以使用它來提取更多信息。 – Borodin

回答

4

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 { 
     ...; 
    } 
} 
+1

謝謝,這更清楚。 – Albert