It’s my understanding that there’s no “bridge” between Ruby and Perl to let you call into Perl functions directly from Ruby. It’s also my understanding that to call a Perl program from Ruby, you simply put it in backticks(i.e. result = `./helloWorld.pl`). However, this doesn’t allow interaction with the Perl program(i.e. you can’t interact with prompts or provide input). My quesitons are as follows:
-
Is there any way to provide input to Perl programs from Ruby(aside from arguments)?
-
Am I wrong that there is no bridge between Ruby and Perl? Interacting with a program’s stdin seems like the wrong way to go when navigating prompts, and the programs I’m dealing with are well-designed and have libraries with the appropriate Perl functions in them.
What you want doesn’t really exist, to my knowledge.
The closest thing to what you want, on a generic level, is XDebug. It turns a process into a little server that will accept debugging commands. This is generally used for debugging and profiling and not as interprocess communication, but its a possibility. I believe ActiveState’s Perl can be run as an XDebug server.
Otherwise, you need explicitly program in some sort of side-channel that your Perl program listens to for commands (which is what XDebug does). It can be as simple as opening a socket that reads a string, evals it, encodes the result as YAML (or whatever) and writes it back. A REPL, but on a socket rather than on a terminal.
There are, obviously, security implications which will be left as an exercise for the reader. You also don’t want listening to the socket to interrupt the program so you will now need something event-driven or threaded.
Sorry I don’t have anything more specific. It would make a great CPAN module.