我想运行此命令,但不是从命令行运行。我想运行文件,例如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;
但它什么都没打印。谢谢你的回答。
答案 0 :(得分: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;
答案 1 :(得分:2)
无需运行单独的perl命令,只需在主脚本中执行所需操作:
open my $file, "input.txt";
my @listOfFiles;
while (<$file>) {
if (/^\s+ (\w+)/x) {
push @listOfFiles, $1;
}
}
close $file;
print "@listOfFiles";