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

时间:2010-08-26 20:32:40

标签: perl

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

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 个答案:

答案 0 :(得分:8)

首先,请了解如何在SQL中使用placeholders and bind variables

其次,您期望“在循环之外”的价值观是什么?您已经浏览了@bats的完整列表。完成之后你认为会有什么?

答案 1 :(得分:7)

这取决于你想要做什么 - 它的循环之外的循环变量没有明显的价值。你想访问@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'};    

请注意,对于第一个/最后一个,您当然可以简单地使用$bats[0]$bats[-1]而不必特别记住循环中的循环元素(假设您不希望“最后一个元素在在完成循环之前可以通过last退出的循环。