2010-08-26 4 views
-1

Je veux accéder $hash_element->{'test_plan'} et $hash_element->{'build'} en dehors de la boucleComment puis-je accéder à des variables en dehors d'une boucle en perl

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."; 

Répondre

8

Tout d'abord, s'il vous plaît apprendre à utiliser placeholders and bind variables dans SQL. Deuxièmement, quelles valeurs attendez-vous «en dehors de la boucle»? Vous avez parcouru toute la liste des @bats. Que pensez-vous qu'il y aurait après que tout cela soit fait?

7

Cela dépend de ce que vous voulez exactement faire - il n'y a pas de valeur évidente pour une variable de boucle en dehors de sa boucle. Voulez-vous accéder à l'élément LAST de @bats? PREMIER élément? Un élément satisfaisant une condition particulière?

Pour le dernier élément, il suffit de faire:

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

Pour un autre élément, vous Stash aussi à l'intérieur d'une valeur distincte:

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'};  

S'il vous plaît noter que pour la première/dernière, votre peut bien sûr utiliser simplement $bats[0] et $bats[-1] sans se souvenir spécialement de l'élément de boucle à l'intérieur de la boucle (en supposant que vous ne voulez pas "le dernier élément vu dans la boucle qui peut sortir via last avant de terminer la boucle)

Questions connexes