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,
In reply to Reassign STDOUT/STDERR contents to a variable by lothos
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |