= と == の違い

MEL のコードを作成する場合によく問題になるのが、表記が似た演算子を混同してしまうことです。

これら 2 つの演算子を混同すると、MEL スクリプトに非常に見つけにくいバグが生じる原因となります。

変数 $a の値が 10 に等しい場合に、メッセージを出力することを考えてください。次の文を試すと:

if ($a = 10) {
	print "equal to 10!";
}

このスクリプトは、必ず「equal to 10!」を出力することがわかります。これは、このスクリプトでは誤って等号が 1 つ(代入演算子)しか使用されていないため、「test」で実際には $a に 10 が割り当てられているからです。割り当ては割り当てられた値、この場合は 10 に評価されます。0 以外の値はいずれも true とみなされるため、この条件は必ず true になります。

この場合、正しいコードは次のようになります。

if ($a == 10) {
	print "equal to 10!";
}

(= ではなく、== を使用します。)

条件文で代入を使用することは、状況によっては便利で手っ取り早い方法になりますが、あまり慣れていない場合は = と == の混同に十二分に注意してください。