http://qs321.pair.com?node_id=968279


in reply to Substring comparison

I am working with index() and how I am using it with Arrays is not working
foreach(@Array1) { $string1 = $_; foreach(@Array2) { my string2 = $_; my $result = index($string2, $string1); if($result <= 0) { print $string1, " is not found in ", $string2, +"\n"; } } }

My @Array1[0] and $string1 is 'FFF'
My @Array2[0] and $string2 is 'FFF NNN JKK III LLL QQQ'
However my return on the above is

FFF is not found in FFF NNN JKK III LLL QQQ

Cleary 'FFF' is part of string 'FFF NNN JKK III LLL QQQ' and should return a result >= 0

This code works however when I am not using Arrays
my $string = "FFF NNN JKK III LLL QQQ"; my $substr = "LLL"; my $result = index($string, $substr); if($result > 0) { print "Result: $result\n"; } else { print "not found";
Result: 16
Is there some way I am going about my Array handling incorrect

Replies are listed 'Best First'.
Re^2: Substring comparison
by trammell (Priest) on May 01, 2012 at 15:16 UTC
    Index returns 0 if the match is at the front of the string, i.e. string offset 0.

    perl -le 'print index("foobar","foo")'

Re^2: Substring comparison
by JavaFan (Canon) on May 01, 2012 at 16:11 UTC
    Cleary 'FFF' is part of string 'FFF NNN JKK III LLL QQQ' and should return a result >= 0
    Indeed, and it does. However, the negation of result >= 0 is not if($result <= 0), which is what you wrote in your program. There is a value (0) that's both >= 0 and <= 0.

    Use if ($result == -1) in your program.