-3

2 つの if ステートメントを使用する perl サブルーチンを作成しました。このサブルーチンを呼び出すと、コントロールはサブルーチンに入り、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 ステートメントの入力に失敗するのはなぜですか。

4

1 に答える 1

1

もちろん違います。のreturn前に発言がありifます。デバッグから何かが残っていますか?

私たちの最高に起こります。:-)

OPがコードを修正した後に編集:

Your$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) です。

于 2013-06-02T12:20:32.537 に答える