Given your desire to extract the matches as you indicate in a comment to @friedo's answer, I am confused as to why you want to avoid alternation:
use strict; use warnings;
use Regex::PreSuf;
my $str = 'i zipped the fezz and it blipped like a baa';
my $re = presuf(qw(moo baa zip fjezz blaa));
my @matches = $str =~ /($re)/g;
print "@matches\n";
Output:
zip baa
Or, do you want the words in the original sentence that match?
use strict; use warnings;
use Regex::PreSuf;
my $re = presuf(qw(moo baa zip fjezz blaa));
my $str = 'i zipped the fezz and it blipped like a baa';
my @matches = grep { /$re/ } split /\s+/, $str;
print "@matches\n";
Output:
zipped baa