2012-02-19 7 views
2

создать текстовый файл, который есть 3 элемента, и я писал этот код:ли уникальную работу для каждого элемента массива

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

и я хочу, если количество элемента 0 сделать что-то, и если 1 делает других вещь и если 2 .... например

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

что я собираюсь делать? Каков наилучший и самый простой способ сделать это? Благодарю .

ответ

2

Одним из лучших способов выполнения работы на основе значения является таблица хэша/переадресации, особенно если вам нужно выполнять такую ​​работу более одного раза в программе. Это связано с созданием хэша, ключи которого являются значениями селектора, а значения - ссылками на работу подпрограммы.

В вашем случае, вы делаете на основе # слов, поэтому массив поиска хороший путь:

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

я думаю, что его трудная часть программирования, спасибо DVK – user1212132

+1

@ user1212132 - не уверен, что вы подразумеваете под самым сложным сектором. Кроме того, в StackOverflow считается хорошей формой, чтобы принять (нажав на галочку рядом с ответом) ответ, если он был полезен как форма благодарности :) – DVK

+0

do u знаете, в чем причина этой ошибки: Не достаточно аргументов для индекса в строке 10 рядом с «index» » – user1212132

Смежные вопросы