eval('use POSIX qw(lchown);'); if (defined &lchown) { eval('sub best_chown($$$) { lchown(@_); }'); } else { eval('sub best_chown($$$) { chown(@_); }'); } # ... use best_chown from now on ....