2013-06-28 5 views
1

Я пытаюсь chdir в perl, но я просто не могу понять, что происходит не так. Этот код работает.perl chdir и системные команды

chdir('C:\Users\Server\Desktop') 

Но при попытке получить вход пользователя он не работает. Я даже попытался использовать chomp, чтобы удалить любые пробелы, которые могут возникнуть.

print "Please enter the directory\n"; 
$p=<STDIN>; 
chdir ('$p') or die "sorry"; 
system("dir"); 

Также может кто-нибудь объяснить, как я мог бы использовать системную команду в той же ситуации, и как она отличается от Chdir.

Конечная цель - получить доступ к двум папкам, проверить файлы с одинаковыми именами (например: если обе папки имеют файл с именем «вода») и скопировать файл с таким же именем в третью папку.

ответ

4

chdir('$p') пытается перейти в каталог, названный как $p. Отбросьте одиночные кавычки:

chdir($p) 

Кроме того, после прочтения, вы, вероятно, хотите, чтобы удалить символ новой строки (если имя каталога на самом деле не кончается с новой строки):

$p = <STDIN>; 
chomp($p); 

Но если вы просто chdiring, чтобы иметь возможность запускать dir и получать результаты в вашем скрипте, вы, вероятно, не хотите этого делать. Прежде всего, система запускает команду, но не выводит ее вывод. Во-вторых, вы можете просто сделать:

opendir my $dirhandle, $p or die "unable to open directory $p: $!\n"; 
my @files = readdir $dirhandle; 
closedir $dirhandle; 

и избежать Chdir и запуск в командной строке команды в целом.

+0

красивого ответа. Хотя мне бы это понравилось больше, если бы вы показали мне пример с системной командой. –

+0

Если вы правильно читаете переменную, не важно, что вы с ней делаете: 'chdir',' system', 'fooBar', это не имеет значения. Кроме того, мы действительно не знаем, что конкретно вы хотите делать с 'system'. – innaM

1

Я буду использовать его таким образом.

ChDir "C:/Users/Server/Desktop"

Вышеперечисленные работы для меня