【问题标题】:Unable to complete a command from prompt line, using qx in Perl无法从提示行完成命令,在 Perl 中使用 qx
【发布时间】:2016-02-11 07:57:44
【问题描述】:

我需要我的 perl 程序在 windows 命令行中执行 DIR 命令。 我使用这些行:

$percorso1= C:\PerlEsercitazione\FileCompare1\VSS\Divina Cömmediä\ProgettoTest
my $cmd_string = "dir /ad /b ".$percorso1 ;
my @result = qx {$cmd_string};                              

显然$percorso1 是要遵循的路径。问题是 @result 原来是空的。我直接在 shell 中输入了 DIR 命令,它可以工作,所以问题应该出在 qx 函数中。我哪里错了?

无论如何我尝试使用 readdir 、opendir 和 closedir 但使用以下代码:

opendir ("Temp_VSS", $percorso1);
my @result = readdir ($percorso1);
closedir ("Temp_VSS");

我收到错误“dirhandle 的错误符号”

【问题讨论】:

  • 为什么不用perl readdir函数?
  • 我是 Perl 的“新手”,我不知道这个函数...我会在教科书中寻找它,然后我会通知你。
  • $percorso1 中的内容
  • $percorso1= C:\PerlEsercitazione\FileCompare1\VSS\Divina Commediä\ProgettoTest
  • 请使用编辑选项将该代码添加到您的问题中。

标签: perl prompt dir qx


【解决方案1】:

不确定为什么会失败(可能是 dir 不是真正的可执行文件,而是一个 shell 命令,因此您可以尝试使用 cmd /c "dir /ad /b $percorso1")。但一般来说,对于你有内部功能的东西,最好避免使用外部程序。

这里特别是File::Slurp::read_dir 可以更轻松地为您做同样的事情,并且具有内部错误处理:

my @files = File::Slurp::read_dir($percorso1, err_mode => 'carp', keep_dot_dot => 0);

【讨论】:

  • 这看起来是避免上一个问题的好方法,但是....我上一次尝试的错误是什么?
  • 或者你可以使用my @files = <$percorso1>
  • 谢谢大家。问题已解决。我已将 qx{} 替换为 qx (),并且正如您在其他 cmets 中所建议的,我已在路径周围添加了“”。
【解决方案2】:

$percorso1 声明缺少引号。 您将需要反斜杠反斜杠。 该行应以分号结尾。 您还需要使用 utf8;因为您的源代码包含 utf8 编码的字符。

第二个 sn-p 看这里: Perl: Bad Symbol for dirhandle

【讨论】:

    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多