On 7/1/05, Moon, John <[EMAIL PROTECTED]> wrote:
> The following is not returning what I had expected...
> 
> SUN1-BATCH>perl -e '$a=q{/var/run}; $home=q{/var/123};print "Yes - $a like
> $home\n" if $a =~ /^$home/;'
> SUN1-BATCH>perl -e '$a=q{/var/run}; $home=q{/var/ra};print "Yes - $a like
> $home\n" if $a =~ /^$home/;'
> SUN1-BATCH>perl -e '$a=q{/var/run}; $home=q{/var/ru};print "Yes - $a like
> $home\n" if $a =~ /^$home/;'
> Yes - /var/run like /var/ru
> 
> 
> I would have "assumed"  that /var/run would NOT be "like" /var/ru just as
> /var/run is not "like" /var/ra...
> 
> John W Moon
> 

John

A regex match checks to see if the specified pattern appears in the
specified string. And the answer to the question "is /var/ru in
/var/run?" is "yes." Or to put it another way:

   $a =~ /$home/

is functionally (although not proceedurally) equivalent to:

   $a =~ /^.*$home.*$/

If you want to do a simple test for equality, use 'eq'. If you're
going to test for a pattern and want to match on the entire string,
anchor the patern at the beginning and end of the string:

   $a =~ /^$home$/

but if $home is a simple string without regex metacharaters 'eq' it
going to be a lot faster than m//.

HTH,

-- jay
--------------------
daggerquill [at] gmail [dot] com
http://www.tuaw.com
http://www.dpguru.com
http://www.engatiki.org

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


Reply via email to