X-Spam-Check-By: sourceware.org Date: Wed, 10 Jan 2007 09:06:15 -0500 (EST) From: Igor Peshansky Reply-To: cygwin AT cygwin DOT com To: Kevin T Cella cc: cygwin AT cygwin DOT com Subject: Re: activestate perl on cygwin In-Reply-To: <000301c733a2$28c29db0$7a47d910$@rr.com> Message-ID: References: <000301c733a2$28c29db0$7a47d910$@rr.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On Mon, 8 Jan 2007, Kevin T Cella wrote: > I understand the trouble with using Activestate perl on cygwin is the > path conversion problem. Searching online I found the following wrapper > script useful for most perl commands: > > #! /bin/sh > > # This is necessary to make perl work with cygwin. Cygwin passes > # "cygwin style" paths to the program in the #! statement and ActiveState > # perl does not know what /cygwin/d/... means. > # > # So, we put #!/usr/local/bin/perl in the perl script and this is called > # This routine translates the path name to something of type d:/ > # > args="" > while [ $# -gt 0 ] > do > var="$1" > shift > > if test "`echo $var | grep '/'`" = "$var" > then > # cygpath does the /cygwin/d/ to d:/ conversion > var=`cygpath -w $var` > > # Then we have to swap \ for / (extra \ needed because the > # shell makes a first pass at removing the \. > # > var=`echo "$var" | sed 's/\\\/\\//g'` > fi > args="$args $var" > done > > # Finally the command is to call perl with the name of the script and the args. > # > /c/Perl/bin/perl.exe $args > > An example of one that does not work is as follows: > > perl -e 'print join "\n", @INC, "\n";' > > For some reason, the script above strips the single quotes from the > command and therefore does not execute the command properly. Please > advise. The reason the script above strips the single quotes from the command is because it's buggy. Not only that, it'll be pretty slow, as it'll spawn a 'test' and a 'sed' for every argument. And, judging from the comments, its intended purpose is to allow invoking perl with a script filename, not with a literal script. Oh, and there's a typo in the comment -- "/cygwin/d" should be "/cygdrive/d". However, none of these issues are Cygwin-specific (with a possible exceptions of the typo and using "cygpath -m" instead of "cygpath -w" to save yourself the trouble of the extra backslash translation). Any good tutorial on bash should show you how to properly quote the arguments. You may also want to search the Cygwin list archives, where this exact issue comes up once in a while (usually in the context of paths with spaces). HTH, Igor -- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_ pechtcha AT cs DOT nyu DOT edu | igor AT watson DOT ibm DOT com ZZZzz /,`.-'`' -. ;-;;,_ Igor Peshansky, Ph.D. (name changed!) |,4- ) )-,_. ,\ ( `'-' old name: Igor Pechtchanski '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! Freedom is just another word for "nothing left to lose"... -- Janis Joplin -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/