The problem I have is that if I run cyradm from the command line to try and atleast get commandline control of imapd, this fails with the following:
fortytwo:/usr/local/cyrus-imapd/bin # ./cyradm
Can't locate Cyrus/IMAP/Shell.pm in @INC (@INC contains: /usr/lib/perl5/5.8.1/i586-linux-thread-multi /usr/lib/perl5/5.8.1 /usr/lib/perl5/site_perl/5.8.1/i586-linux-thread-multi /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.1/i586-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl .).
BEGIN failed--compilation aborted.
fortytwo:/usr/local/cyrus-imapd/bin #
You need to make sure that Cyrus::IMAP::Shell (Cyrus/IMAP/Shell.pm) is on your perl search path. This can be set using an environment variable, an argument to perl, etc. I've just edited bin/cyradm to explicitly add the search path to the perl command(s), as - like you - I keep Cyrus in a non-standard location.
'man perlrun' should get you started.
Craig Ringer