为Array的每个元素做独特的工作

时间:2012-02-19 22:05:14

标签: arrays perl

我创建了一个包含3个元素的txt文件,我编写了这段代码:

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(@... 

我该怎么办?这样做的最好和最简单的方法是什么?谢谢。

1 个答案:

答案 0 :(得分: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.
}