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: / Пользователи / Сервер / Рабочий стол"

Вышесказанное работает для меня

Другие вопросы по тегам