You possibly may have more occurrences of the string in the input, so search for all of them...
I believe your code should look like this >>
use open ':encoding(utf8)';
use Encode;
binmode(STDOUT, ":utf8");
binmode(STDIN, ":utf8");
my $word = Encode::decode_utf8("ہے");
my @files = glob("*.posn");
my @matches = ();
foreach my $file (@files) {
open FILE, "<$file" or die "Error opening file $file ($!)";
my $file = do {local $/; <FILE>};
close FILE or die $!;
my @occurrences = $file =~ /<Sentence id='\d+'>(?:[^<]|<(?!\/Sentence>))*$word\tVM(?:[^<]|<(?!\/Sentence>))*<\/Sentence>/g;
print STDOUT "$_\n\n\n\n" for (@occurrences);
push (@matches, "$_\n\n") for (@occurrences);
}
open (OUTPUT, ">matches.txt");
print OUTPUT "@matches";
close(OUTPUT);
Learn more about regular expressions here.