lothos has asked for the wisdom of the Perl Monks concerning the following question:
I have a contiuously running script that executes pieces of perl code stored in mysql. I control the input scripts so security and namespace polution are not really a concern, although ideas about controlling that as well are welcome.
I currently write out what I want STDIN to be to a file, and the reassign STDIN to that file, restoring STDIN when done. Same goes for STDERR and STDOUT.
open(SAVEOUT, ">&STDOUT"); open(SAVEERR, ">&STDERR"); close(STDIN); open(STDIN, $stdin_file); close(STDOUT); open(STDOUT,'>' . $stdout_file); close(STDERR); open(STDERR,'>' . $stderr_file); select(STDERR); $| = 1; select(STDOUT); $| = 1; eval $perl_script_content; my $result_code = $@;
Works, but now I have to read the files back in to get the results, and files are so passe.
Is there a direct way to redirect what would go to STDOUT and STDERR to variables, for the purpose of catching the output of my eval? I imagine the same could be used to redirect my STDIN from a variable.
I'm using an eval to avoid invoking the shell. I do want the perl code that is to be run to work standalone though, so no rewriting it as a sub.
I've seen working examples using a double fork, but that seems excessive.
Thank you Monks,
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Reassign STDOUT/STDERR contents to a variable
by almut (Canon) on Sep 25, 2009 at 17:32 UTC | |
by lothos (Novice) on Sep 25, 2009 at 18:02 UTC | |
by almut (Canon) on Sep 25, 2009 at 18:12 UTC | |
by lothos (Novice) on Sep 25, 2009 at 18:38 UTC | |
by almut (Canon) on Sep 25, 2009 at 19:02 UTC | |
| |
by bv (Friar) on Sep 25, 2009 at 20:23 UTC | |
by lothos (Novice) on Sep 25, 2009 at 22:57 UTC | |
by bv (Friar) on Sep 25, 2009 at 18:37 UTC | |
by lothos (Novice) on Sep 25, 2009 at 18:53 UTC |