From owner-freebsd-questions Mon Oct 2 14:10:29 2000 Delivered-To: freebsd-questions@freebsd.org Received: from dh198-236.dhcp.sunysb.edu (dh198-236.dhcp.sunysb.edu [129.49.198.236]) by hub.freebsd.org (Postfix) with ESMTP id 866B837B66D; Mon, 2 Oct 2000 14:10:21 -0700 (PDT) Received: (from chris@localhost) by dh198-236.dhcp.sunysb.edu (8.9.3/8.9.3) id RAA85019; Mon, 2 Oct 2000 17:09:50 -0400 (EDT) (envelope-from chris) From: Christopher Rued MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <14808.63902.442934.667120@chris.xsb.com> Date: Mon, 2 Oct 2000 17:09:50 -0400 (EDT) To: "Andresen,Jason R." Cc: Mark Ovens , Christopher Rued , freebsd-questions@FreeBSD.ORG Subject: Re: Perl question In-Reply-To: <39D8D5D9.67A3074B@mitre.org> References: <14808.52583.347797.384055@chris.xsb.com> <20001002191537.G252@parish> <20001002192617.I252@parish> <39D8D5D9.67A3074B@mitre.org> X-Mailer: VM 6.75 under 21.1 (patch 10) "Capitol Reef" XEmacs Lucid Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Andresen,Jason R. writes: > > BTW, your RE should have a ``*'' as well: > > > > /x.*?y/ > > > > Maybe, it depends on exactly what he was trying to get. > > The first 3 character match where x and y are the first and third > character respectivly, then x.y is exactly what you want. The smallest > set of characters that have x and y as boundry values? Then your x.*?y > is correct. The smallest set of characters that have x and y as > boundries and have at least one character in between them? x.+?y is > needed. The RE I used was precisely what I wanted: x.y (an `x' followed by exactly one character followed by a `y'). When I run the following: #!/usr/bin/perl $a = "xayxbyxcyxdy"; @s = $a =~ /x.y/; print "\@s is @s\n"; I get: @s is 1 So, I seem to be getting the truth value rather than the first match in the string. If, however, I wrap the entire RE in a parentheses (make it a subexpression) like so: #!/usr/bin/perl $a = "xayxbyxcyxdy"; @s = $a =~ /(x.y)/; print "\@s is @s\n"; I get the results I wanted to begin with: @s is xay (I discovered this shortly after I sent the first message about this). What confuses me is that if I specify the global option, I do not need to use a subexpression. For example, if I run the following code: #!/usr/bin/perl $a = "xayxbyxcyxdy"; @s = $a =~ /x.y/g; print "\@s is @s\n"; I get: @s is xay xby xcy xdy So, this leaves me with a couple of questions, the main one being: Why the different treatment for single matches and global matches? and a less important one: Why is there no way to have the first match assigned to a scalar, since we can be sure that there will be at most one match returned? If anyone can explain this, and/or answer the questions posed above, I'd appreciate it. -Chris To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message