Yes, this is a chronic nuisance when writing portable Perl scripts under Windows. Because our scripts run on many different customer machines, we don't have the option of removing the autorun value from the Registry. There are two ways around this:
- Use CMD /D to disable autorun; for example, print "\ncd=" . `cmd /d/c cd`; in your example program.
- Contrive to execute the command without invoking a shell; for example, system { $exe } @args, where $exe is the executable name and @args are its arguments (see perldoc -f exec for more details). Though more work, this approach leads to programs that are more robust and a bit more efficient, in that no shell process is created.
| [reply] [d/l] [select] |
Contrive to execute the command without invoking a shell; for example, system { $exe } @args, where $exe is the executable name and @args are its arguments (see perldoc -f exec for more details).
Just wanted to point out an aside, that for the "cd" command, the shell is the command interpreter. It's a built-in in most shells, CMD.EXE or bash or otherwise. There are other built-ins that apply to this pattern as well.
Running a subprocess to change directories won't help the shell or other parent processes, of course, as the child's process is insular. To change directories in perl, also use the builtin (the chdir function).
-- [ e d @ h a l l e y . c c ]
| [reply] [d/l] [select] |