[perl] XOR?

2007/05/14
By

為了某個原因,要對兩個變數做 XOR 的檢查,除了這個之外不知道有沒有更好的寫法:

sub _IsXOR {
    my $lvalue = shift;
    my $rvalue = shift;

    return 0 if (!defined($lvalue) and !defined($rvalue));
    return 1 if (!defined($lvalue) or !defined($rvalue));
    return ($lvalue ne $rvalue);
}

檢查:

print _IsXOR("1", 1)."n";
print _IsXOR(1, 5)."n";
print _IsXOR(undef, 5)."n";
print _IsXOR(undef, undef)."n";
print _IsXOR("1", "1")."n";

結果:

 
1
1
0
 

註,空行是 false,也可以說是 0。

2007/12/10:一直忘了補上 gugod 的版本:

sub _IsXOR {
return (shift||0) ^ (shift||0);
}

Tags:

3 Responses to [perl] XOR?

  1. Victor on 2007/05/14 at 9:40 下午

    我第一個想到的是直接 return (shift ^ shift) ? 1 : 0;
    不過最後一個 case 會爆 :p

    另外一個做法是 return "$lvalue" ne "$rvalue"
    這樣應該行吧? :p

  2. clsung on 2007/05/14 at 11:34 下午

    這樣應該會有 warning… 如果是 undef 的 value …

  3. gugod on 2007/08/11 at 10:27 下午

    sub _IsXOR {
    return (shift||0) ^ (shift||0);
    }

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*


*