0

Cシェルと同様の方法で、データをperlスクリプトに埋め込み、後で一時ファイルとして使用/読み取る方法はありますか?

cat<< eof>tmp.txt
store a multiline text file
eof

run_some_function on [anotherexternalfile] with [tmp.txt]

rm tmp.txt

1 つの perl スクリプト内に複数のコマンド/データ ファイルのセットを埋め込み、一連のコマンドをまとめて、大量の外部コマンド ファイルの要件を回避したいと考えています。

アップデート

埋め込まれたファイル/データは、次のように別の実行可能な関数の入力ファイルとして読み取る必要があります。

system("executable.exe [anotherexternalfile] [tmp.txt]");
4

4 に答える 4

5

私が理解しperlているDATAように、スクリプトから使用するデータを保持できるハンドルがあります。こちらです:

#!/usr/bin/env perl

while ( <DATA> ) {
  ## Work with this data as if you were reading it from an external file.
}

__DATA__
some data
more data
and more...
于 2013-03-13T21:19:04.420 に答える
2

Perl には "here ドキュメント" http://perl.about.com/od/perltutorials/qt/perlheredoc.htmがあります。もちろん、Perl はシェルと同じように外部コマンドを実行できます: http://www.perlhowto.com/executing_external_commands

于 2013-03-13T21:17:27.310 に答える
1

それらはhere-docsと呼ばれ、Perl でサポートされています。

print <<'__EOI__';
foo
bar
__EOI__

my $x = <<'__EOI__';
foo
bar
__EOI__

for (<<'__EOI__', <<'__EOI__')
foo
bar
__EOI__
abc
def
__EOI__
{
    print;
}
于 2013-03-13T21:36:28.160 に答える
0

user1937198 の提案によると:

my @cmds = (
    "cmd1 arg1 arg2",
    "cmd2 arg1 > somefile",
);
for my $cmd (@cmds) {
    system($cmd);
}

ヒアドキュメントに対するより完全な回答として:

my $cmds = <<CMDS;
cmd1 arg1 arg2
cmd2 arg1 > somefile
CMDS

for my $cmd (split("\n", $cmds)) {
    system("$cmd");
}
于 2013-03-13T22:11:54.997 に答える