проверка условия в foreach в perl, если не совпадает pu sh с массивом - PullRequest
0 голосов
/ 29 января 2020

Я использую Perl

У меня есть строка (через запятую), затем цикл в foreach. В foreach я проверяю каждый элемент, если он существует. И тут начинается сложная часть.

Если элемент не существует, я хочу поместить sh его в строку или массив, разделенные запятыми, и перейти к следующему элементу.

В в тот момент, когда код, который я использую, не делает этого.

Вот что у меня есть:

my @cnames = split(',', $comma_separated_values;
foreach my $cname (@cnames) {
    my @records_to_change = "function to check the cname";
    if (@records_to_change) {
        $records_to_change[0]->set_google_maps_key($google_maps_key || '');
        $records_to_change[0]->set_https_only( $https_only );
    }else{
        FAILED { 'success' => 0 };
    }
    $records_to_change[0]->update();
}

С этим кодом, если элемент не существует, он останавливается, отобразить сообщение об ошибке (не описано здесь) и не будет продолжаться.

Есть идеи, как это сделать?

1 Ответ

5 голосов
/ 29 января 2020

Код, который вы опубликовали, даже не компилируется (отсутствует закрывающая скобка).

Не ясно, что возвращает «помеченная вручную» функция проверки имени, поэтому я понятия не имею, что происходит не так. Но в целом лог c правильный и должен работать:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

sub check_existence {
    exists {a => 12, c => 14}->{ $_[0] }
}

my $comma_separated_values = 'a,b,c,d';

my @cnames = split /,/, $comma_separated_values;
my @missing;
foreach my $cname (@cnames) {
    if (check_existence($cname)) {
        say "$cname is ok.";
    } else {
        push @missing, $cname;
    }
}
say 'Missing: ', join ', ', @missing;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...