If Else in Perl



If Else in Perl

if-elsif-else这样的语句在我们的code里再常见不过了。

my $name = "John";

sub name_solute {
    my $item = shift;
    my $ret;
    if ($item eq "Tom") {
	$ret = "Hi Tom.";
    }
    elsif ($item eq "Jerry") {
	$ret = "Run! Run!";
    }
    elsif ($item eq "Lucy") {
	$ret = "Where is Lily?";
    }
    else {
	$ret = "I do not know you.";
    }
    return $ret;
}

my $solute = name_solute($name);

如果我们换一种方式,比如三元式,可能更好看一点。

my $solute = 
    $name eq "Tom"   ?  "Hi Tom."             :
    $name eq "Jerry" ?  "Run! Run!"           :
    $name eq "Lucy"  ?  "Where is Lily?"      :
			"I do not know you."  ;

另外提一种比较好的数据结构,可以用来实现比较复杂的逻辑或者小环境。

my $ref_var = {
     "name"               =>  [[],\&name_proc] ,
     "address"            =>  [[],\&addr_proc] ,
     "mail"               =>  [[],\&mail_proc] 
     };

 push( @{ $ref_var->{name}->[0] }, "John Smith");
 push( @{ $ref_var->{address}->[0] }, "Beijing, China");
 push( @{ $ref_var->{mail}->[0] }, "john\@gmail.com");

 &{ $ref_var->{name}->[1] }( @{ $ref_var->{name}->[0]} );
 &{ $ref_var->{address}->[1] }( @{ $ref_var->{address}->[0]} );
 &{ $ref_var->{mail}->[1] }( @{ $ref_var->{mail}->[0]} );

 sub name_proc {
     my $item = shift;
     print "Hello, $item\n";
 }

 sub addr_proc {
     my $item = shift;
     print "He lives in $item\n";
 }

 sub mail_proc {
     my $item = shift;
     print "You can contact to $item\n";
 }

首先,$ref-var是一个hash的reference ,它的各个key所对应的都是一个list的reference。每一个list里面,又分成一个空的list的reference,用来存input变量,以及一个函数指针。这个结构不错呦,我也是从大神那搬过来的,O(∩_∩)O哈哈~