嵌套for循环的逻辑解决方案

时间:2015-02-12 22:30:22

标签: perl

我有一点逻辑消耗。我希望我能以一致的方式解释我所缺少的和我想要的东西。如果我需要添加更多数据或信息,请告诉我。

我有一个Excel电子表格,我试图加载到数据库。我已经将数据投入到一系列哈希中。数组中的数据如下所示

$hash_of_excel = [
    {
        col1 => 'value1',
        col2 => 'value2',
        col3 => 'value3|value4',
        col4 => 'value5|value6|value7',
    },
    {
        col1 => 'value8',
        col2 => 'value9',
        col3 => 'value10|value11|value12',
        col4 => 'value13|value14|value15',
    },
    {
        col1 => 'value16|value17',
        col2 => 'value19|value18',
        col3 => 'value20',
        col4 => 'value21',
    }
]

我有一段代码遍历此数据结构以获取值

foreach my $results ( @$hash_of_excel ) {
    for my $colname ( sort keys %$results ) {
        my @array = split /\|/, $results->{$colname};
        foreach my $value ( @array ) {
            warn $results->{'col1'}, $results->{'col2'}, $results->{'col3'};
            last;
        }
    }
    last if $counter++ == 2;
}

这将导致相同的值一遍又一遍地打印每个哈希中的列数(在我们的例子中为4)。

如何访问DBI插入的不同列,而无需经历大量的for循环?

有没有办法检查该值是否有多个值并将它们推送到数组而不是必须将它们全部放入数组中?

或者,将数据库插入到子例程并仅传递数组中所需的列值是否合适?

1 个答案:

答案 0 :(得分:2)

目前还不清楚你究竟想要什么,但是你最内层的循环很奇怪:它使用@array迭代$value,但$value没有使用它 - 这就是为什么你'为所有迭代重新获得相同的输出。

以下循环输出所有值:

foreach my $value (@array){
    warn $value;
}

即。没有$results,没有last