如何在foreach循环内修改Perl数组中的元素?

时间:2015-06-08 16:03:14

标签: arrays perl csv foreach

我对这段代码的目标是清理一系列元素(一个URL列表,一些包含特殊字符,如%),这样我最终可以将它与另一个URL的文件进行比较并输出哪些比赛。 URL列表来自.csv文件,第一个字段是我想要的URL(还有一些我用快速if()语句跳过的其他条目)。

foreach my $var(@input_1) {
    #Skip anything that doesn't start with http:
    if ((/^[#U]/ ) || !(/^h/)) {
        next;
    }
    #Split the .csv into the relevant field:
    my @fields = split /\s?\|\s?/, $_;
    $var = uri_unescape($fields[0]);
}

我的分隔符是csv中的|。在其当前设置中,以及当我将$_更改为$var时,它仅返回空行。当我在循环开始时删除$var声明并使用$_时,它将以正确的格式输出URL。但在这种情况下,如何将输出分配给数组中的同一元素?这是否需要第二个数组才能将值输出到?

我对perl比较陌生,所以我确信有一些我不知道的东西。我现在不知道为什么删除$var声明中的foreach会破坏@fields行的解析,但删除它并使用$_则不会。阅读perlsyn文档并没有像我希望的那样有用。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

var selIndex = []; function SaveSelectedColumns(){ selIndex = []; $("#myTable-popup .ui-checkbox label").each(function(idx){ if ($(this).hasClass("ui-checkbox-on")){ selIndex.push(idx); } }); } 未绑定任何内容,因此匹配针对function LoadSavedColumns(){ $("#myTable-popup .ui-checkbox label").each(function(idx){ var vis = IsColVisible(idx); if ($(this).hasClass("ui-checkbox-on") && !vis){ $(this).click(); } if ($(this).hasClass("ui-checkbox-off") && vis){ $(this).click(); } }); } function IsColVisible(idx){ for (var i=0; i<selIndex.length; i++){ if (selIndex[i] == idx) return true; } return false; } 。如果你想匹配/^h/,你必须绑定它:

$_

$var与两个匹配项一起使用可能会合并到一个正则表达式中,并带有替代方法:

if ($var =~ /^[#U]/ || $var !~ /^h/) {

即。该行必须以||next if $var =~ /^(?: [#U] | [^h] | $ )/x; 开头,而不是#,或者为空。

您可以使用U

填充包含结果的新数组
h

另请注意,如果您的数据可以包含push引用或转义(或换行等),则应使用Text::CSV代替push @results, $var;