SPUG: regular expression difficulty, plus compiled perl

Todd Wells toddw at wrq.com
Tue Mar 28 14:02:20 CST 2000


Aha!  I previously understood all of this (yes I know about $1, $2, etc...)
except for the part about "the return value of that matching expression (in
a list context) will be the list of matching subexpressions" -- now I see
the light!  I was expecting the return value of the matching expression to
be the matching expression! 

-----Original Message-----
From: Scott Blachowicz [mailto:scott at sabmail.rresearch.com]
Sent: Tuesday, March 28, 2000 11:40 AM
To: Todd Wells
Cc: 'Ryan Erwin'; spug-list at pm.org
Subject: Re: SPUG: regular expression difficulty, plus compiled perl


On Tue, Mar 28, 2000 at 11:27:55AM -0800, Todd Wells wrote:
> Thanks again too all of you who've offered solutions...
> 
> So Ryan, it would appear that the difference here is the parentheses
inside
> the regular expression?  Why do the parentheses make it work?  I must
> confess some puzzlement over this.
> 
> My original that didn't work:
> ($test1 = $0)=~ m#.*\\#;

What you're saying there is to assign $0 to the variable $test1, then
test to see if it has a backslash in it.

> Yours that does work:
> $test =~ m#(.*\\)#;.

The parens actually capture part of the matching string. To get at the
captured substrings, use $N (where N is a number corresponding to the
order of appearance of the open paren in the pattern).  Also, the
return value of that matching expression (in a list context) will be
the list of matching subexpressions. So, for example,

	$test = 'c:\\foo\\bar\\baz.cpp';
	($WholePath, $DirWithSlash, $Dir, $Base) =
		($test =~ m#(((.*)\\)(.*))#);
	print "$WholePath = $1\n";
	print "$DirWithSlash = $2\n";
	print "$Dir = $3\n";
	print "$Base = $4\n";

prints out this:

	c:\foo\bar\baz.cpp = c:\foo\bar\baz.cpp
	c:\foo\bar\ = c:\foo\bar\
	c:\foo\bar = c:\foo\bar
	baz.cpp = baz.cpp

Scott

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
 Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
 SUBSCRIBE/UNSUBSCRIBE: Replace "action" below by subscribe or unsubscribe
           Email to majordomo at pm.org: "action" spug-list your_address





More information about the spug-list mailing list