2012-02-19 4 views
2

créer un fichier txt qui ont 3 éléments et moi avons écrit ce code:Faire un travail unique pour chaque élément de tableau

my $in_file1 = 'file.txt'; 
open DAG,$in_file1; 
my @shell=<DAG>; 
close DAG; 
chomp(@shell); 
foreach my $shell(@shell){ 
# and etc code 

et je veux si le nombre d'éléments est 0 faire quelque chose et si 1 font les autres chose et si 2 .... par exemple

if (@shell[0]) print "hi"; if(@shell[1]) print "bye" if(@... 

Que vais-je faire? Quelle est la meilleure et la plus simple façon de faire cela? Merci .

Répondre

2

L'une des meilleures façons de travailler en fonction d'une valeur est une table de hachage/redirection, en particulier si vous devez effectuer ce type de travail plus d'une fois dans un programme. Cela implique la création d'un hachage dont les clés sont les valeurs du sélecteur, et les valeurs sont des références au travail du sous-programme.

Dans votre cas, vous faites basé sur nombre de mots, donc un tableau de recherche est une bonne façon d'aller:

sub bye { print "bye"; } 
my @actions = (
    sub { },   # do nothing for 0. Using anonymous sub 
    sub { print "hi" }, # print "hi" for 1 
    \&bye,    # for 2 - illustrate how to use reference to existing sub 
); 
use File::Slurp; # To read the file 
my @lines = read_file("my_file"); 
for (my $index = 0; $index < @lines; $index++) { 
    &{ $actions[$index] }($lines[$index]); 
    # Call the sub stored in an array in correct place 
    # Pass it the line value as argument if needed. 
} 
+0

Je pense que la plus difficile partie de la programmation, Merci DVK – user1212132

+1

@ user1212132 - pas sûr de ce que vous entendez par section la plus difficile. Aussi, sur StackOverflow, il est considéré comme une bonne forme pour accepter (en cliquant sur une coche à côté de la réponse) une réponse si elle était utile comme une forme de remerciement :) – DVK

+0

sais-tu quelle est la raison de cette erreur: Non assez d'arguments pour l'index à la ligne 10 près de "index]" – user1212132

Questions connexes