Ваш вопрос на самом деле не связан с режимом порчи. Вы установили
$ENV{PATH}="/usr/bin:/bin:/sbin:/usr/sbin";
Эти каталоги обычно не существуют на компьютере с Windows. dir
является внутренней командой cmd.exe, поэтому для ее выполнения необходимо добавить каталог, в котором она находится, по пути.
Теперь обратите внимание, что то, как вы это делаете, противоречит всему смыслу установки пути к известным определенным местам. Для гнусного пользователя определенно возможно изменить эту переменную среды так, чтобы она указала на его опасную версию dir
.
Тот факт, что Windows не обязательно устанавливается в C: \ Windows, усложняет написание скрипта для защиты от заражения в Windows, если вы полагаетесь на какую-либо встроенную оболочку.
РЕДАКТИРОВАТЬ: Вот короткая тестовая программа, которую вы можете использовать в качестве основы:
#!/usr/bin/perl -T
use strict;
use warnings;
$ENV{PATH} = join(';', qw(C:\Windows C:\Windows\System32) );
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
open my $pipe_h, '-|', 'dir'
or die "Cannot open pipe to dir: $!";
print while <$pipe_h>;
close $pipe_h
or die "Cannot close pipe to dir: $!";
__END__
C:\Temp> perl -T v.pl
...
2009/05/25 08:58 AM 3,584 zzz.exe
64 File(s) 32,125,365 bytes
14 Dir(s) 39,251,894,272 bytes free
Обычно системному администратору нужно жестко задавать допустимый путь во время установки, а недоверенным пользователям не иметь права на запись в сценарий.