in reply to Unix environment variables for exec process

Try specifying the full path to the exp command, e.g.:
my $command = '/full/path/to/exp';
If you don't know where it is, just use the which command from your terminal:
$ which exp
Update: This is very likely a PATH issue. When you run the command from the command line your PATH variable contains the directory that the exp resides in. When cron runs it begins with a very limited PATH. Even though you are modifying environement variables before invoking exp, note that it is being run in cron's context. So if oracle_env.sh does not explicitly modify the PATH variable to include the directory for exp, cron will not be able to find that program.