perl chdir и системные команды
Я пытаюсь chdir в Perl, но я просто не могу понять, что происходит не так. Этот код работает.
chdir('C:\Users\Server\Desktop')
Но при попытке получить ввод от пользователя это не работает. Я даже пытался использовать chomp для удаления любых пробелов, которые могут появиться.
print "Please enter the directory\n";
$p=<STDIN>;
chdir ('$p') or die "sorry";
system("dir");
Также может кто-нибудь объяснить, как я мог использовать системную команду в этой же ситуации и чем она отличается от chdir.
Конечная цель - получить доступ к двум папкам, проверить наличие файлов с одинаковыми именами (например, если в обеих папках есть файл с именем "water") и скопировать файл с одинаковым именем в третью папку.
2 ответа
chdir('$p')
пытается перейти в каталог с буквальным именем $p
, Бросьте одинарные кавычки:
chdir($p)
Также, после прочтения, вы, вероятно, захотите удалить символ новой строки (если имя каталога действительно не заканчивается символом новой строки):
$p = <STDIN>;
chomp($p);
Но если вы просто хотите, чтобы иметь возможность бежать dir
и получить результаты в вашем сценарии, вы, вероятно, не хотите этого делать. Прежде всего, система запускает команду, но не фиксирует ее вывод. Во-вторых, вы можете просто сделать:
opendir my $dirhandle, $p or die "unable to open directory $p: $!\n";
my @files = readdir $dirhandle;
closedir $dirhandle;
и вообще избегайте chdir и запуска команды командной строки.
Я буду использовать это таким образом.
chdir "C: / Пользователи / Сервер / Рабочий стол"
Вышесказанное работает для меня