The grep operator simply returns the subset of the input list where the expression in the first parameter evaluates to a true value.
Since your @ar array has only a single element, and because that element contains SLP, your call of grep returns it to you.
It sounds like what you need is map, which returns the result of the expression in the first parameter when executes in list context. The expression /SLP/g returns all occurrences of SLP in a string, so
map /SLP/g, <DATA>
will return a list of all occurrences on SLP in any line in the DATA file handle.
It is a little more complex if you want all possibly overlapping occurrences of a string, but it can be written using a more elaborate Perl regex. This program prints all overlapping occurrences of XXX from within XXXXXX. There are four instances because the pattern can be found starting at the first, second, third, and fourth characters of the target string.
use strict;
use warnings;
use 5.010;
say for map /(?=(XXX))/g, <DATA>
__DATA__
XXXXXX
output
XXX
XXX
XXX
XXX