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 に答える