in reply to Faced with Null/blank/empty value

I may be wrong here, but it looks like you're only looking for one of these to match. If so, why not do this:
/^([\w ]+?)\s+:.(\d+)/ or /^([\w ]+?)\s+:.'(.*)'/ or /^([\w ]+?)\s+:.>(.*)</ or /^([\w ]+?)(.*?)/ # no value or next; # I'm assuming this is in a loop somewher +e $$ref_entry{$1} = $2 || 'default value here'; print "TEST $1 ==> $2\n";

.02

cLive ;-)

Replies are listed 'Best First'.
Re: Re: Faced with Null/blank/empty value
by jsprat (Curate) on Jul 22, 2003 at 08:58 UTC
    Good idea - especially if it is in a loop. Instead of all three regexes every time, it'll do a maximum of 3.

    In order to get the same results, however, the three regexes need to be reversed. In bh_perl's example, when the first match and the last match succeeded, $1 and $2 are set in the third match. In your example, if the first match succeeds the third is never evaluated so $1 and $2 are set by the first match. Reverse the three matches and the results will match the OP's.

      I assumed that only one match was required and that bh_perl was just a little inexperienced here in coding that idea. If you look, the 3 regular expressions are exclusive - ie, if one matches, the other two won't.

      cLive ;-)

        If you look, the 3 regular expressions are exclusive - ie, if one matches, the other two won't.

        Ahhh, good point. I didn't look at the regexes closely enough.