Как я могу получить доступ к переменным вне цикла for в Perl - PullRequest
0 голосов
/ 27 августа 2010

Я хочу получить доступ к $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 ]

8 голосов
/ 27 августа 2010

Во-первых, пожалуйста, узнайте, как использовать заполнители и связывать переменные в SQL.

Во-вторых, какие значения вы ожидаете "вне цикла"?Вы прошли весь список @bats.Как вы думаете, что там будет после того, как все это будет сделано?

7 голосов
/ 27 августа 2010

Это зависит от того, что именно вы хотите сделать - нет очевидного значения для переменной цикла вне ее цикла.Хотите получить доступ к последнему элементу @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 до окончания цикла).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...