/ / perl osadza dane jak w powłoce c - perl, shell, command, embed

perl osadza dane jak w powłoce - perl, shell, command, embed

Czy istnieje sposób na osadzenie danych w skrypcie perla i użycie go / odczytanie później jako pliku tymczasowego w podobny sposób jak w c-shell.

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

run_some_function on [anotherexternalfile] with [tmp.txt]

rm tmp.txt

Chcę osadzić wiele zestawów poleceń / plików danych w jednym skrypcie perla, aby zakończyć zestaw poleceń, aby uniknąć wymogu mnogości zewnętrznych plików poleceń.

Aktualizacja

Wbudowany plik / dane należy odczytać jako plik wejściowy dla innej funkcji wykonywalnej, jak poniżej.

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

Odpowiedzi:

1 dla odpowiedzi № 1

Nazywają się tutaj-docsi są obsługiwane przez Perla.

print <<"__EOI__";
foo
bar
__EOI__

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

for (<<"__EOI__", <<"__EOI__")
foo
bar
__EOI__
abc
def
__EOI__
{
print;
}

4 dla odpowiedzi nr 2

Jak rozumiem, perl zawiera DATA uchwyt, w którym można zachować dane do użycia ze skryptu. Tą drogą:

#!/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...

2 dla odpowiedzi nr 3

Perl ma „tutaj dokumenty” http://perl.about.com/od/perltutorials/qt/perlheredoc.htm. I oczywiście Perl może wykonywać polecenia zewnętrzne tak jak powłoka: http://www.perlhowto.com/executing_external_commands


0 dla odpowiedzi nr 4

Zgodnie z sugestiami użytkownika 1937198:

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

Jako pełniejszą odpowiedź na niniejszy dokument:

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

for my $cmd (split("n", $cmds)) {
system("$cmd");
}