1

我想运行这个命令,但不是从命令行。我想运行文件,例如 first.pl 执行一些其他命令。例如,当我运行此文件时,我想这样做:

perl -ne "print qq{$1\n} if /^\s+ (\w+)/x" file

它应该在这个文件中。我尝试这样的事情:

my $input = "input.txt";
my @listOfFiles = `perl -ne "print qq{$1\n} if /^\s+ (\w+)/x" $input`;
print @listOfFiles;

但它什么也没打印。感谢您的回答。

4

2 回答 2

3

一直用use strict; use warnings;!你会得到

Unrecognized escape \s passed through
Unrecognized escape \w passed through
Use of uninitialized value $1 in concatenation (.) or string

作为$1除了想要的$input. 所以你需要正确地逃避你的论点。假设您不在 Windows 系统上,

use strict;
use warnings;

use String::ShellQuote qw( shell_quote );

my $input = "input.txt";
my $cmd = shell_quote('perl', '-ne', 'print "$1\n" if /^\s+ (\w+)/x', $input);
chomp( my @listOfFiles = `$cmd` );
print "$_\n" for @listOfFiles;
于 2013-05-06T22:18:53.677 回答
2

无需运行单独的 perl 命令,只需在主脚本中执行您想要的操作:

open my $file, "input.txt";
my @listOfFiles;
while (<$file>) {
  if (/^\s+ (\w+)/x) {
    push @listOfFiles, $1;
  }
}
close $file;
print "@listOfFiles";
于 2013-05-07T10:53:04.223 回答