如果不匹配推送到数组,则检查 perl 中 foreach 中的条件

uda*_*rts -1 perl

我正在使用 Perl

我有一个字符串(逗号分隔),然后在 foreach 中循环它。在 foreach 中,我正在检查每个项目是否存在。棘手的部分来了。

如果一个项目不存在,我想把它推送到一个逗号分隔的字符串或数组,然后继续下一个项目。

目前我使用的代码并没有这样做。

这是我到目前为止所拥有的:

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();
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,如果项目不存在,它会停止,显示错误消息(此处未描述)并且不会继续。

知道如何做到这一点吗?

cho*_*oba 5

您发布的代码甚至无法编译(缺少右括号)。

目前尚不清楚手动挥手的“检查 cname 的函数”返回什么,所以我不知道出了什么问题。但总的来说,逻辑是正确的,应该可以工作:

#!/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;
Run Code Online (Sandbox Code Playgroud)