我想在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.";
答案 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
退出的循环。