John W. Krahn wrote:
> 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
Quite right John, Thank you.
>>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;
> }
Mumia made the same point. In context, this was the first and only pattern match
in the program, so $1 would have remained undefined if the match had failed. But
I agree, the code was not correct in general and I should have made that clear.
I must stop posting after 1:00 am :-/
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>