如何执行if语句写在perl子例程中

时间:2013-06-02 12:18:31

标签: perl if-statement

我编写了一个perl子例程,我在使用两个if语句。当我调用这个子程序时,控件进入子程序,打印xml但不进入if语句。

sub send_msg {
    my ($type,$name,$number,$email,$testid) = @_;
    my $xml = qq{<tolist><to>}
            . qq{<name>$name</name>}
            . qq{<contactpersonname>$name</contactpersonname>}
            . qq{<number>$number</number>} 
            . qq{<email>$email</email>} 
            . qq{</to></tolist>}
            . qq{<from>}
            . qq{<name>$name</name>};
    $xml .= qq{<number>$number</number>}if($type eq 0);
    $xml .= qq{<email>$email</email>}if($type eq 1);
    $xml .= qq{</from>};
  print "\ntype : $type\n";
  print "\nxml :$xml\n"; 


   if ($type == 1)
  {  print"Inside type1";
    $sql3 = "select text from test where TestId='$testid'";
    $sth3 = $dbh->prepare($sql3);
    $sth3->execute
    or die "SQL Error: $DBI::errstr\n";
    my ($message) = $sth3->fetchrow_array();
    my $targetxml="<shorttext>".$message."</shorttext>";
    print "\n $targetxml \n";

  }

   if ($type == 0)
  {
   print "Inside type 0\n"; 
   $sql5 = "select testText,testTitle from test where TestId='$testid'";
   $sth5 = $dbh->prepare($sql5);
   $sth5->execute
   or die "SQL Error: $DBI::errstr\n";
   my ($subject,$title) = $sth5->fetchrow_array(); 
   my $mailxml="";
   $mailxml=$mailxml."<subject>".$title."</subject>";
   $mailxml=$mailxml."<body>".$subject."</body>";
   $mailxml=$mailxml."<type>html</type>";
   print "\n$mailxml\n";

  }
}

在上面的代码中,我使用send_msg(1,Joe,91.97451214551,rich@r.in,32);调用子程序 $ xml和$ type被打印,但为什么没有输入if语句。

1 个答案:

答案 0 :(得分:1)

当然不是。在return之前有一个if声明。调试遗留下来的东西?

发生在我们最好的人身上。 : - )

OP修复代码后

编辑

您的$type既不是数字0也不是数字1.您应该使用

等分隔符打印它
print "length($type) = ". length($type) . "\n";
print "type = <$type>\n";

接下来,将代码缩减为:

sub send_msg {
   my ($type,$name,$number,$email,$testid) = @_;
   if ($type == 0) {
     print "type is 0\n";
   }
   elsif ($type == 1) {
     print "type is 1\n";
   }
   else {
     print "type is neither 0 nor 1, but <$type>\n";
   }
}

我不认为这是错误,但我注意到你使用

... if($type eq 0);

在另一个地方,这不是数字比较(==),而是字符串比较(eq)。