【问题标题】:perl chdir and system commandsperl chdir 和系统命令
【发布时间】:2013-06-25 23:11:01
【问题描述】:

我正在尝试在 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”的文件)并将具有相同名称的文件复制到第三个文件夹中。

【问题讨论】:

    标签: perl compare system chdir


    【解决方案1】:

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

    【讨论】:

    • 漂亮的答案。如果你也给我看一个系统命令的例子,我会更喜欢它。
    • 如果你正确地读取了变量,你用它做什么都没有关系,chdirsystemfooBar,它没有任何区别。此外,我们真的不知道你想用system做什么。
    【解决方案2】:

    我会这样用。

    chdir "C:/Users/Server/Desktop"

    以上对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2011-05-23
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 2017-03-15
      • 2013-06-12
      相关资源
      最近更新 更多