For two inputs, there are 16 operations. Most of them are rarely useful, which is why we don't have Perl operators for them.
By the way, everything can be implemented solely with nand:
p | q | p nand q
---+---+----------
0 | 0 | 1
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
not p === p nand p
p and q === (p nand q) nand (p nand q)
p or q === (p nand p) nand (q nand q)
p xor q === (p nand (q nand q)) nand ((p nand p) nand q)
Other operatations could also be used instead of nand. nor, for example:
p | q | p nor q
---+---+---------
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
1 | 1 | 0
~(p nor q)
not p === p nor p
p and q === (p nor p) nor (q nor q)
p or q === (p nor q) nor (p nor q)
p xor q === [something very long]