2013-06-28 168 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:/用户/服务器/桌面”

上述工作对我来说