0

有没有办法将数据嵌入到 perl 脚本中,然后以类似于 c-shell 的方式将其作为临时文件使用/读取。

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

run_some_function on [anotherexternalfile] with [tmp.txt]

rm tmp.txt

我想在一个 perl 脚本中嵌入多组命令/数据文件来包装一组命令,以避免需要过多的外部命令文件。

更新

嵌入文件/数据需要作为另一个可执行函数的输入文件读取,如下所示。

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

4 回答 4

5

据我了解,perlDATA句柄,您可以在其中保存要从脚本中使用的数据。这边走:

#!/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 有“这里的文档” http://perl.about.com/od/perltutorials/qt/perlheredoc.htm。当然 Perl 可以像 shell 一样执行外部命令: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);
}

作为对 here-doc 的更完整答案:

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

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