Я не знаю в какой системе вы это проверяли и почему в Вашем strace.log так много вызовов exec и open. Полагаю, что это проблема Вашей системы, а не Perl. Вот какие результаты я получил в FreeBSD 6.0-BETA5:
> truss -o truss.out env aaaa
env: aaaa: No such file or directory
> cat truss.out
mmap(0x0,3600,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 671535104 (0x2806d000)
munmap(0x2806d000,0xe10) = 0 (0x0)
__sysctl(0xbfbfe728,0x2,0x28069998,0xbfbfe724,0x0,0x0) = 0 (0x0)
mmap(0x0,32768,(0x3)PROT_READ|PROT_WRITE,(0x1002)MAP_ANON|MAP_PRIVATE,-1,0x0) = 671535104 (0x2806d000)
issetugid() = 0 (0x0)
open("/etc/libmap.conf",0x0,0666) ERR#2 'No such file or directory'
open("/var/run/ld-elf.so.hints",0x0,00) = 4 (0x4)
read(0x4,0xbfbfe6f0,0x80) = 128 (0x80)
lseek(4,0x80,SEEK_SET) = 128 (0x80)
read(0x4,0x28072000,0x56) = 86 (0x56)
close(4) = 0 (0x0)
access("/lib/libc.so.6",0) = 0 (0x0)
open("/lib/libc.so.6",0x0,00) = 4 (0x4)
fstat(4,0xbfbfe730) = 0 (0x0)
read(0x4,0x280688e0,0x1000) = 4096 (0x1000)
mmap(0x0,880640,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 671567872 (0x28075000)
mprotect(0x28133000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x28133000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x28134000,20480,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0xbf000) = 672350208 (0x28134000)
mmap(0x28139000,77824,(0x3)PROT_READ|PROT_WRITE,(0x1012)MAP_ANON|MAP_FIXED|MAP_PRIVATE,-1,0x0) = 672370688 (0x28139000)
close(4) = 0 (0x0)
sysarch(0xa,0xbfbfe7a0) = 0 (0x0)
mmap(0x0,344,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 672448512 (0x2814c000)
munmap(0x2814c000,0x158) = 0 (0x0)
mprotect(0x28075000,782336,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mmap(0x0,22152,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 672448512 (0x2814c000)
munmap(0x2814c000,0x5688) = 0 (0x0)
mprotect(0x28075000,782336,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
sigprocmask(0x1,0x28068820,0xbfbfe770) = 0 (0x0)
sigprocmask(0x3,0x28068830,0x0) = 0 (0x0)
execve("/sbin/aaaa",<missing argument>,<missing argument>)
execve("/sbin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/bin/aaaa",<missing argument>,<missing argument>)
execve("/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/sbin/aaaa",<missing argument>,<missing argument>)
execve("/usr/sbin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/bin/aaaa",<missing argument>,<missing argument>)
execve("/usr/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/games/aaaa",<missing argument>,<missing argument>)
execve("/usr/games/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/local/sbin/aaaa",<missing argument>,<missing argument>)
execve("/usr/local/sbin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/local/bin/aaaa",<missing argument>,<missing argument>)
execve("/usr/local/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/X11R6/bin/aaaa",<missing argument>,<missing argument>)
execve("/usr/X11R6/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/home/user/bin/aaaa",<missing argument>,<missing argument>)
execve("/home/user/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
write(2,0xbfbfe2b0,5) = 5 (0x5)
write(2,0xbfbfe2d0,4) = 4 (0x4)
write(2,0x2812d264,2) = 2 (0x2)
write(2,0xbfbfe2b0,26) = 26 (0x1a)
exit(0x7f)
process exit, rval = 32512
Как видете, в наихудьшем случае количество вызовов execve() равно количеству путей в PATH и до /usr/local/bin можно добраться всего за 6 вызовов execve(). Я не вижу тут какого-то особенного использования ресурсов. Тоесть от использования env(1) гораздо больше пользы чем вреда. Поэтому рекомендации авторов perlintro вполне уместны и полезны. Повторяю, бардак с размещением perl устроен дистроклепателями. Вот пусть они с ним и разбераются - перемещают perl в /usr/local/bin или делают там симлмнк на него. Почему из-за них нормальные системы должны поддерживать нестандартное размещение программ?