One approach is to just read the whole file into a scalar, search for the desired command, then extract everything up to that command into a second string, and search for the last function definition inside that second string.
Another approach is to read the file line by line, and when a match is found, open a second handle to that file, this time reading backwards (either File::ReadBackwards or PerlIO::reverse), seek to the position of the find, and then read (backwards) until the function definition is found.
A third approach is to read the file in function chunks straight away, and then search each chunk for the commands.