It's working great! I've only made a few changes. I changed the (/^Exec=(\S+)/) back to (/^Exec=(.*)/) because I still want to preserve the flags present at the end of some "Exec=xxx" lines (for example: "Exec=pcmanfm-mod --find-files" which corresponds to a "Name=Search for Files and Folders"), while still excluding %f, %F, %u and %U from any entries, because these act as placeholders for the filenames or urls on which the user has right-clicked.
The new script did create a small issue, however. I noticed that it prints the submenus in a different order from how they're listed. Do you know of any simple ways to make it respect the order in which they're specified when they're assigned at "my $regex ="? If not, it's completely usable how it is and I'll keep it in mind as I'm reading some of the books you suggested.