This doesn't look *too* bad to me. There are a few style deviations (I won't say violations since most of these standard are not rules per se). You only indent two spaces. The Perl standard is 4 spaces (personally I prefer 3 spaces, but that's just me). You're 2 space indents don't seem quite enough to sufficiently mark the indented blocks.
if (!($ARGV[0])) { would be better written without the extranous do-nothing parentheses:
if (! $ARGV[0]) {. This code
} elsif (!($ARGV[0] =~ /^-/)) { is unnecessarily complex. This is better:
} elsif ($ARGV[0] !~ /^-/) {. If you use the perl
-s switch in your #! line you could simplify the logical structure of your program considerably since that will handle processing the command line option for you. Also all those if/elsif/else blocks tend to cover up the real core functionality of your program. There are an array of other syntactic tools in Perl that would let your code be clearer and shorter. Rather than go through all of them, let me just show you another way to approach the same problems that gives much clearer results:
#!c:\perl\bin\perl.exe -ws
use strict;
use Crypt::Twofish_PP;
die "Syntax: crypt.pl (-e|-d) Text" unless @ARGV == 1;
my $crypt = Crypt::Twofish_PP->new('innatelyinsecure');
print $e ? $crypt->encrypt(shift @ARGV) :
$d ? $crypt->decrypt(shift @ARGV) :
"Invalid mode argument (must be -e or -d)";
Now, if you read about the way that perl -s works you'll see that my version behaves a little differently than yours; it's not as tight with the command line. You could have multiple options listed even things that are not -d or -e.
IMO there's nothing really bad in your code, but you are definitely not using the full range of expressive and functionaly power in Perl to create code that is optimally clear to a human reader.
--DrWhy
"If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."