"Jeff 'japhy' Pinyan" <[EMAIL PROTECTED]> writes:

> On Sep 6, Harry Putnam said:
>
>>IMPORTANT: I don't want techniques involving call back (remembered)
>>operators and parens, I know how to piece those together for simple
>>things like the file below.
>
> Is there a reason for that limitation?  Oh well.  Anyway, here's a good
> approach:

Only a dumb or misinformed one.. I had assumed it would be a complex
thing looking like someone barfed alphabet soup with match sticks in
it, and lots of parens. ... hehe.

It appears that using perl defaults as some of the suggestions do its
really pretty simple.

>
>   while (<INPUT>) {
>     print substr($_, $-[0], $+[0] - $-[0]), "\n" if /pattern/;
>   }

> For information about what the @- and @+ arrays represent, read 'perlvar'.
>
> This is more or less the same as
>
>   while (<INPUT>) {
>     print "$&\n" if /pattern/;
>   }

I haven't read the suggested material yet, having just seen your
post, but I noticed the post using the $& formulation you quote
above seemed to lack the ability to register multiple hits on a
single line as the /(pattern)/g formulation is able to do.
Ditto with your formulation above.

cat test.f
   here is a string and another string
   only one string here
   again only one sting 
   now go with 3 strings with string matter strung between the strings
   strings

cat $& style script test.pl
  #!/usr/local/bin/perl -w
     while (<>) {
       print "$&\n" if /string\w*/;
     }


Result:

  $ ./test.pl test.f
  string
  string
  strings
  strings

=======


cat Jeff's formulation test3.pl

   #!/usr/local/bin/perl -w
  while (<>) {
    print substr($_, $-[0], $+[0] - $-[0]), "\n" if /string\w*/g;
  }

Results:
  $ ./test3.pl test.f
  string
  string
  strings
  strings

======
Whereas the /(pattern)/g formula gets them all.
cat test2.pl
   #!/usr/local/bin/perl -w
     while (<>) {
       push @array, $_ =~ /(string\w*)/g;
     }
   for(@array){
     print "$_\n";
   }

Results:

$ ./test2.pl test.f
  string
  string
  string
  strings
  string
  strings
  strings



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to