in reply to system() on linux/win32

Ah HAH! You're trying to get Windows to spawn a child process. It'll never work!! ...But you can fake it.

Long story short: system("start " . $excel, $excelfilename);

If you want Perl to spawn your Excel process but keep on doing its jiggy Perl-thing, instead of calling Excel yourself, you should tell Windows to do it for you. This is done with the DOS "start" command. Try it out. Bring up a DOS prompt and enter "notepad". It'll come up normal. Close it and enter "start notepad". Same thing. Now here's the interesting part. Put this on the command line:

perl -e "system('notepad'); print 'NaSe77 rules!'"

This will bring up the notepad, but it won't tell you who rules until you close notepad. Finally try this:

perl -e "system('start notepad'); print 'NaSe77 rules the Kingdom of Notepad, baby!'"

The notepad is up, and the print statement functions right away. Instant fake fork. Ain't life grand?

It took me a week and a half of looking for this on Perlmonks when I needed it. I can't remember where I found it, but props to mystery monk who originally posted this solution. -the Pedro Picasso
(sourceCode == freeSpeech)

Replies are listed 'Best First'.
Re: Re: system() on linux/win32
by blogan (Monk) on Apr 26, 2002 at 02:40 UTC
    I believe when you use start you can just give it the filename and it will open it with the application that's associated with it.
      Just for completeness in case someone comes here looking, it's worth mentioning that the equivalent command on OS X is open. Though of course OS X can do fork() properly.