ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl-win32-users
perl-win32-users
Re: Back-slashes & calling a batch file from perl ???
by $Bill Luebkert other posts by this author
Oct 28 2005 4:58PM messages near this date
view in the new Beta List Site
Re: Back-slashes & calling a batch file from perl ??? | Re: Back-slashes & calling a batch file from perl ???
Michael D Schleif wrote:
>  * $Bill Luebkert <dbecoll@[...].net> [2005:10:28:07:21:26-0700] scribed:
> > I ran it like this and it seems OK, but I don't have the same conditions:
>  
>  There's the rub ;>
>  
> > use diagnostics;
> > use strict;
> > use warnings;
> >
> > my $prog = "E:/usr/ov/bin/nvhotbackup.bat";
> > my $dir = 'E:/backup';
> >
> > if (not -d $dir) {
> > 	mkdir $dir or die "mkdir $dir: $! ($^E)";
> > }
>  
>  I have cut-pasted your exact code.  Please, recognize that my real code
>  does use tests of this nature.

If your mkdir is failing in the Perl script, could there be a permissions
problem ?  You're using /'s instead of \'s like the above right ?

>  Also, please, notice the anomaly I tried to describe in my last post,
>  regarding whether or not this directory actually gets created (see
>  below.)
>  
> > my $dest = timestamp ();
> > if (not -d "$dir/$dest") {
> > 	mkdir "$dir/$dest" or die "mkdir $dir/$dest: $! ($^E)";
> > }
> >
> > do_prog ($prog, $dir, $dest);
> >
> > exit 0;
> >
> > # Run system command & return exit code
> >
> > sub do_prog {
> > 	my ($prog, $dir, $dest) = @_;
> >
> > $dir =~ s!/!\\!g;	# this one you definitely need
> > $prog =~ s!/!\\!g;	# this may be optional
>  
>  This is _not_ required, since MS Windows 2003 Server _does_ follow
>  forward slashes in cmd shell.

That's why I said it was optional.  It works either way.
Actually mine works without either of them I believe.

> > my $cmd = qq{$prog "$dir" $dest};
> > print "CMD == ", $cmd, "\n";
> >
> > # my $null = "NUL";
> > # system "$cmd >$null 2>&1";
> >
> > system $cmd;		# seems OK
>  
>  Again, I get the same results that I have always had at this point.
>  Your code has not affected my results ;<
>  
> > # my @res = `$cmd`;	# also tried this OK
> > #print "res='@res'\n";
>  
>  The reason that this is *not* an option is, I need to use the exit codes
>  from the call to batch file.

You still can get the return code from `` calls:

    $CHILD_ERROR
    $?      The status returned by the last pipe close, backtick (``) command,
            successful call to wait() or waitpid(), or from the system()
            operator. This is just the 16-bit status word returned by the wait()
            system call (or else is made up to look like it). Thus, the exit
            value of the subprocess is really ("$? > > 8"), and "$? & 127" gives
            which signal, if any, the process died from, and "$? & 128" reports
            whether there was a core dump. (Mnemonic: similar to sh and ksh.)

>  Please, understand: Whenever I use back-slashes -- however many, however
>  quoted do far -- this directory does *NOT* get created!  Nor does the
>  Perl code die at the mkdir test ?!?!

Then don't use back slashes.  I created the dir without them - look at
the mkdir's above.

>  Here are my two (2) basic problems:
>  
>  [A] The called batch file will not accept a file path with
>      forward-slashes; and

So reverse them just before the system call.

>  [B] When I pass the directory string _with_ back-slashes, the mkdir :

I thought the dir was already made before passing the args to the bat file ?

>      - does *NOT* create a directory;

The mkdir (in the Perl code) should have already created the dir and it
works fine with slashes, so use them there.

I'm not following you - be more explicit on where the mkdir is - Perl or bat ?

>      - does *NOT* die nor croak any warning;
>      - function is passed and do_prog() *IS* called;
>      Of course, since the batch file concatenates $dir and $dest into a
>      directory path, into which it tries to copy many files, the batch
>      file *ALWAYS* fails, because there is *NO* directory into which
>      those files can be copied.

If that's true, you should first concentrate on getting the mkdir in
the Perl script to work so it's there - before you deal with the bat file.

>  Yes, I know that this is confusing; and I am quite befuddled ;<
>  
>  Here is information on my development workstation:
>      System Information:
>      OS Name    MS Windows XP Professional
>      Version    5.1.2600 SP 1 Build 2600

That's what I'm on.

>  C:\>perl -v
>  
>  This is perl, v5.8.7 built for MSWin32-x86-multi-thread
>  (with 7 registered patches, see perl -V for more detail)

I'm one behind you there.

>  What do you think?

I think you're doin something wrong.  ;)

_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@[...].com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
Thread:
Michael D Schleif
Michael D Schleif
Chris Wagner
$Bill Luebkert
$Bill Luebkert
Michael D Schleif
$Bill Luebkert
Michael D Schleif
$Bill Luebkert
Michael D Schleif
$Bill Luebkert
James Sluka
Ted Zeng
$Bill Luebkert
Ted Zeng
Paul
Peter Eisengrein
Trevor Joerges
Jim Guion
$Bill Luebkert
James Sluka
$Bill Luebkert
Chris Wagner

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved