Hi! I’m clsung

Hi! I’m clsung

clsung’s blog site, or you can call me AlanSung

Hi! I’m clsung RSS Feed
 
 
 
 

[perl] XOR?

為了某個原因,要對兩個變數做 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);
}
Share and Enjoy:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • funp
  • Haohao
  • Hemidemi
  • Live
  • MisterWong
  • TwitThis
  • udn

3 Responses to “[perl] XOR?”

  1. 1
    Victor:

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

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

  2. 2
    clsung:

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

  3. 3
    gugod:

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

Leave a Reply

噗浪:

分類

Flickr

    clsung. Get yours at bighugelabs.com/flickr

Blogroll

    馬的警總回來了
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Taiwan
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Taiwan