代码之家  ›  专栏  ›  技术社区  ›  kamal

如何在perl中访问for循环之外的变量

  •  -1
  • kamal  · 技术社区  · 14 年前

    我想进入 $hash_element->{'test_plan'} $hash_element->{'build'} 在for循环之外

    my $hash_element;
    for $hash_element (@bats) {
        my $dbh = DBI->connect( $dsn, $BAT_DB_user, $BAT_DB_password );
        my ( @plan_id, @plan_run );
        @plan_id = $dbh->selectrow_array(
                   "select id from plan where name='$hash_element->{'test_plan'}'");
    }
    
    $emailsubject = "BAT - " . $hash_element->{'test_plan'} . " on " . $hash_element->{'build'} . " done.";
    
    2 回复  |  直到 14 年前
        1
  •  8
  •   Sinan Ünür    14 年前

    首先,请学习如何使用 placeholders and bind variables 在SQL中。

    第二,你希望“循环外”有什么价值?你已经看过了 @bats

        2
  •  7
  •   Eric Strom    14 年前

    这取决于你到底想做什么——循环变量在循环之外没有明显的值。是否要访问@bats的最后一个元素?第一个元素?满足特定条件的元素?

    对于最后一个元素,只需执行以下操作:

    my $hash_element_last;
    for my $hash_element (@bats) {
        # whatever logic
        $hash_element_last = $hash_element;
    }
    my $emailsubject = "BAT - " . $hash_element_last->{'test_plan'};
    

    my $hash_element_remembered;
    for my $hash_element (@bats) {
        # whatever logic
        # Use for the first element
        $hash_element_remembered = $hash_element unless defined $hash_element_remembered;
        # Use for the "special" element
        $hash_element_remembered = $hash_element if (some_special_logic)
    }
    my $emailsubject = "BAT - " . $hash_element_remembered->{'test_plan'};    
    

    请注意,对于first/last,您当然可以使用 $bats[0] $bats[-1] 不需要特别记住循环中的循环元素(假设您不希望“在循环中看到的最后一个元素,它可能通过 last 在完成循环之前)。