in reply to Problem with system ()

Update:

Corion is correct. Whilst the method I show below will probably achieve your aim, the reasoning is wrong.

The main problem with your original code, ie. The reason your are getting 'ERROR' all the time, is because system returns the return code from the command run, rather than success or failure, therefore the idoim system(...) or die "ERROR"; is wrong.

For more information on how to test for the success or failure of a command issued with system follow that link or look it up in your local copy of perlfunc.

However, the command you were issuing wouldn't have achieved your aim without the /d switch corion describes, and which I always forget about.

</update>

The standard cd command on Win32 doesn't accept a drive component to the command. (Try that same command from the command line to verify this).

You could use system( 'c: & cd \temp' );


Examine what is said, not who speaks.
1) When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong.
2) The only way of discovering the limits of the possible is to venture a little way past them into the impossible
3) Any sufficiently advanced technology is indistinguishable from magic.
Arthur C. Clarke.

Replies are listed 'Best First'.
Re: Re: Problem with system ()
by Corion (Patriarch) on Mar 18, 2003 at 14:27 UTC

    Sorry, but that's wrong. At least under NT4 (and higher), the following behaviour holds :

    S:\Systeme_Projekte\Ism\Maischein>cd S:\Systeme_Projekte\Ism\Maischein S:\Systeme_Projekte\Ism\Maischein>cd c: C:\TEMP S:\Systeme_Projekte\Ism\Maischein>cd c:\winnt S:\Systeme_Projekte\Ism\Maischein>cd S:\Systeme_Projekte\Ism\Maischein S:\Systeme_Projekte\Ism\Maischein>cd c: C:\WINNT S:\Systeme_Projekte\Ism\Maischein>cd /d c:\winnt C:\WINNT>

    The cd command without any parameter outputs the "current directory".

    The cd drive: command outputs the "current directory of the drive".

    The cd drive:\path command changes the "current directory of the drive".

    The /d option also changes the current drive.

    perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web