|Don't ask to ask, just ask|
Problems with jobs failing to run in cron are almost always because of the environment. Note: these are cron issues and nothing to do with Perl.
Shells call start-up files on initialisation, and they call different start-up files depending on:
a) the shell type, e.g. sh, csh, ksh88, ksh93, bash, behave differently.
b) if this is a logon shell
c) if this is an interactive shell
We have no way of knowing for sure which shell you are using. However, a best guess is that you have a .profile and/or a .kshrc, or maybe .bash_profile and/or .bashrc. If you are using these, then you may need to "source" them before feh will run (that is using the "dot" command : . in sh or ksh, "source" in csh or bash). That would require a shell script containing the "source" command followed by the call to feh.
It would be better to put the environment settings in your perl script instead, but that would require you to actually know which settings are affecting the feh program.