Rob Dixon wrote:
> Adriano Allora wrote:
>>
>>         $tex =~ s/^([^|]+).*/$1/o;
> 
> Your regex is correct, but it doesn't do what you said you wanted! You're
> substituting the entire string in $tex for just those characters up to
> the first
> pipe, but there's nothing in $tex - the data has been read into $_.
> 
> If you want to do what you've written, then s/|.*// is a lot easier: it
> just removes everything starting at the first pipe.

The | is for alternation so if you want to match a literal | character you
have to escape it:

s/\|.*//s


> If you want to do what you said, and put everything up to the pipe into a
> variable (scalar $tex?) then
> 
>   /([^|]+)/;
>   $tex = $1;

You should only use the numeric variables if the match was successful
otherwise their contents may not be what you expected.

   if ( /([^|]+)/ ) {
       $tex = $1;
       }



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to