Ваш повторяющийся фрагмент из четырех строк кода:
# temp dir
push @tests, -d $temp_dir ? 'temp dir exist: OK' : 'temp dir exist: ERROR';
push @tests, mkdir("$temp_dir/test") ? 'temp dir mkdir: OK' : 'temp dir mkdir: ERROR';
push @tests, rmdir("$temp_dir/test") ? 'temp dir rmdir: OK' : 'temp dir rmdir: ERROR';
должен быть в подпрограмме:
sub check_dir()
{
my($dir) = @_;
push @tests, (-d $dir) ? "$dir exist: OK' : "$dir exist: ERROR $!";
push @tests, mkdir("$dir/test") ? "$dir/test mkdir: OK" : "$dir/test mkdir: ERROR $!";
push @tests, rmdir("$dir/test") ? "$dir/test rmdir: OK" : "$dir/test rmdir: ERROR $!";
}
check_dir($temp_dir):
check_dir($upload_dir);
check_dir($orig_dir);
check_dir($img_dir);
Это предполагает, что @tests
доступно для check_dir()
, изкурс.Он также заключает в скобки -d
, что может предотвратить неправильное толкование аргумента.
Интересно, что вы перечислили:
temp_dir => '/var/www/cgi-bin/temp',
upload_dir => '/var/www/cgi-bin/uploads',
cgi_dir => '/var/www/cgi-bin',
htdocs_dir => '/var/www/htdocs',
htdocs_tmp_dir => '/var/www/htdocs/tmp',
, который не включает $img_dir
, как указано воригинальный код.Это также выглядит как инициализатор для хэша.Давайте предположим, что хэш равен %dir_list
.Вы уверены, что не хотели использовать:
check_dir($dir_list{temp_dir});
Etcetera.Если вы не покажете нам точно код, который выполняете, ответы, которые вы получите, будут менее точными, чем если бы вы показали нам исполняемый код, который мы можем протестировать и проанализировать.