2013-06-28 226 views
1

我想在perl中chdir,但我只是無法讓我的腦袋出現問題。 此代碼有效。perl chdir和系統命令

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

但是,當試圖獲得用戶的輸入,它不起作用。我甚至嘗試使用chomp刪除任何可能會出現的空間。

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

也可以有人請解釋我怎麼可以在這種情況下使用系統命令,以及它如何不同於chdir。

最終目的是訪問兩個文件夾,檢查命名相同的文件(例如:如果兩個文件夾都有一個名爲「water」的文件)並將具有相同名稱的文件複製到第三個文件夾中。

回答

4

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和運行命令提示符命令完全。

+0

漂亮的答案。儘管如果你已經向我展示了系統命令的例子,我也會更喜歡它。 –

+0

如果你正確地讀取了變量,那麼你用它做什麼,'chdir','system','fooBar'都沒有關係,它沒有什麼區別。另外,我們真的不知道你想用'system'做什麼。 – innaM

1

我會用這種方式。

CHDIR 「C:/用戶/服務器/桌面」

上述工作對我來說