--- Michael Alipio <[EMAIL PROTECTED]> wrote:

> It would be pointless to put () in my regexp when testing with if, unless
> I'm grouping something or I want to do something with $1. 

Correct.
 
> if  /(^\w+)\s+/
> 
> But if I am assigning something, like:
> 
> my $captured =~ /^(\w+)\s+/
> 
> I should put it inside parenthesis.

That doesn't make sense.  Since you have 'my $captured', it's a lexical
variable just being declared and it doesn't yet have a value.  You could try
this:

  my $captured;
  if ( $some_var =~ /^(\w+)\s+/ ) {
      $captured = $1;
  }
  if ( $captured ) { ... }

> I also noticed that $capture here will always contain the first catched
> match ($1).

No, it doesn't in your example.  The only way to make that work would be to
use 'list context' and default to matching the '$_' variable:

  my ($capture) = /^(\w+)\s+/;

Note that because we're using parentheses on the left side, that forces list
content and because we're using the assignment operator, '=', instead of the
binding operator, '=~', the regular expression matches against '$_' instead
of the left hand side.  This is probably a bit more of an advanced usage,
though.  You might use it like this:

  while (<FH>) {
      next if /^#/;                  # skip comments
      my ($capture) = /^(\w+)\s+/;   # grab first 'word'
      ...
  }

> The, (?:) as suggested by someone is also good when I want to avoid
> something being stored in $n... I have read about it and a lot
> more(particularly the extended regexp features) in perlre but not quite
> sure what they mean.

Yes, that's correct.  Sometimes you want to group something but not capture
it to a variable:

  if ( $some_var =~ /(?:foo|bar)/ ) {   # matched by not captured
      ...
  }

Hope that helps.

Cheers,
Ovid

--

Buy the book -- http://www.oreilly.com/catalog/perlhks/
Perl and CGI -- http://users.easystreet.com/ovid/cgi_course/

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


Reply via email to