Heterograms, Palindromes, oh my!
Pyth, 17 bytes
Z.{rzZ.q.Zzr}.Z
Try it online here.
The leading space is necessary. I have counted it and the trailing space in the byte count.
Here's the breakdown:
z z is initialized to the input
r Z Z is initialized to 0, and r(string)0 converts the string to lowercase
.{ .{ is pyth's builtin uniqueness test
.q .q terminates the program
.Zzr} This is just the program mirrored
.Z . requires a number to immediately follow it
If left blank the parser would throw an error
Z This is just mirrored from the end
The leading space suppresses the automatic printing of this 0
The trailing space mirrors the leading space
Python 3, 125
The main problem is to make the reverse of the code parsable. Then we can let it error out from undefined identifiers.
w=[str.lower][0]((input)())
(print)((max)((map)(w.count,w))<2)
(2>((w,tnuoc.w)(pam))(xam))(tnirp)
(()(tupni))[0][rewol.rts]=w
Perl, 43 bytes
print+m:^(?!.*(.).*\1|1/*.(.)*.!?)^:m+tnirp
Usage example:
echo "abcde" | perl -n entry.pl