shell_ready function

2004-08-18 Thread Joe Orton
Does the quote escaping really work in this function?  It confuses emacs
font-lock mode which doesn't see a closing quote so thinks the rest of
the file is part of the string.  This fixes at least the latter:

Index: TestConfig.pm
===
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
retrieving revision 1.239
diff -u -r1.239 TestConfig.pm
--- TestConfig.pm   15 Aug 2004 23:19:57 -  1.239
+++ TestConfig.pm   18 Aug 2004 08:55:29 -
@@ -1754,7 +1754,7 @@
 # escape quotes)
 sub shell_ready {
 my $arg = shift;
-$arg =~ s//\/g;
+$arg =~ s//\\/g;
 return qq[$arg];
 }
 


Re: shell_ready function

2004-08-18 Thread Geoffrey Young


Joe Orton wrote:
 Does the quote escaping really work in this function?  

hmm, it doesn't look like it does.  I think this was part of some work that
stas and ken were doing, though, and IIRC it was some win32 command line
thing.  but I could be wrong.

 It confuses emacs
 font-lock mode which doesn't see a closing quote so thinks the rest of
 the file is part of the string.  This fixes at least the latter:

 -$arg =~ s//\/g;
 +$arg =~ s//\\/g;

that looks better, but I'm not sure it's right either - if the input is
already escaped then you've (both) over-quoted (if the first worked at all,
that is :)  so, you look to be fine here if pre-quoted input is forbidden or
not expected, but not so if it's already quoted, in which case something
like this is better:

  $arg =~ s!([^\\])!$1\\!g;

the attached script runs through a few different regex and input
combinations for visual inspection.  hopefully that will help sort this
issue out a bit (or the original author will clear things up ;)

--Geoff
#!/usr/bin/perl

foreach my $data (DATA) {
  chomp $data;
  print 'old:   ', shell_ready_old($data), \n;
  print 'joe:   ', shell_ready_joe($data), \n;
  print 'geoff: ', shell_ready_geoff($data), \n;
  print '-' x 30, \n;
}

sub shell_ready_old {
my $arg = shift;
$arg =~ s//\/g;
return qq[$arg];
}

sub shell_ready_joe {
my $arg = shift;
$arg =~ s//\\/g;
return qq[$arg];
}

sub shell_ready_geoff {
my $arg = shift;
$arg =~ s!([^\\])!$1\\!g;
return qq[$arg];
}

__DATA__
one fish two fish
red \fish\ blue \fish\
this one has a little star
this one has a \little car
say, \what \a \lot of fish there are


Re: shell_ready function

2004-08-18 Thread Stas Bekman
Geoffrey Young wrote:
Joe Orton wrote:
Does the quote escaping really work in this function?  

hmm, it doesn't look like it does.  I think this was part of some work that
stas and ken were doing, though, and IIRC it was some win32 command line
thing.  but I could be wrong.

It confuses emacs
font-lock mode which doesn't see a closing quote so thinks the rest of
the file is part of the string.  This fixes at least the latter:

-$arg =~ s//\/g;
+$arg =~ s//\\/g;

that looks better, but I'm not sure it's right either - if the input is
already escaped then you've (both) over-quoted (if the first worked at all,
that is :)  so, you look to be fine here if pre-quoted input is forbidden or
not expected, but not so if it's already quoted, in which case something
like this is better:
  $arg =~ s!([^\\])!$1\\!g;
the attached script runs through a few different regex and input
combinations for visual inspection.  hopefully that will help sort this
issue out a bit (or the original author will clear things up ;)
Yeah, I guess it's the best to ask Ken, it worked for him.
Jon's looks better, and Geoff's is even better,
I've checked CPAN and found
http://search.cpan.org/src/ROSCH/String-ShellQuote-1.00/ShellQuote.pm
but it probably is not what you are after, right?
Either way +1 to Geoff's version.
and here is the optimized version of Geoff's one:
sub shell_ready_stas {
my $arg = shift;
$arg =~ s!\\?!\\!g;
return qq[$arg];
}
:)
--
__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


Re: shell_ready function

2004-08-18 Thread Geoffrey Young

 and here is the optimized version of Geoff's one:
 
 sub shell_ready_stas {
 my $arg = shift;
 $arg =~ s!\\?!\\!g;
 return qq[$arg];
 }
 
 :)

Benchmark: timing 100 iterations of geoff, stas...
 geoff: 64 wallclock secs (56.35 usr +  0.10 sys = 56.45 CPU) @
17714.79/s (n=100)
  stas: 43 wallclock secs (40.27 usr +  0.06 sys = 40.33 CPU) @
24795.44/s (n=100)

/me bows to the master

--Geoff