¿Cómo aplico el formato a una palabra en particular en un archivo docx usando Win32 :: Ole en Perl?

Por ejemplo, mi archivo docx contiene las siguientes oraciones:

Este es un ejemplo de Perl
Este es un ejemplo de Python
Este es otro ejemplo de Perl

Quiero aplicar un estilo en negrita a todas las apariciones de la palabra "Perl" de esta manera:

Esto es unPerl ejemplo
Este es un ejemplo de Python
Este es otroPerl ejemplo

Hasta ahora he creado el siguiente script:

use strict; use warnings;
use Win32::OLE::Const 'Microsoft Word';

my $file = 'E:\test.docx';

my $Word = Win32::OLE->new('Word.Application', 'Quit');
$Word->{'Visible'} = 0;
my $doc = $Word->Documents->Open($file);
my $paragraphs = $doc->Paragraphs() ;
my $enumerate = new Win32::OLE::Enum($paragraphs);


while(defined(my $paragraph = $enumerate->Next())) {

    my $text = $paragraph->{Range}->{Text};
    my $sel = $Word->Selection;
    my $font = $sel->Font;

    if ($text =~ /Perl/){
        $font->{Bold} = 1;              
    }   
    $sel->TypeText($text);          
}

$Word->ActiveDocument->Close ;
$Word->Quit;

Pero ha aplicado un estilo en negrita a todo el párrafo y no edita las oraciones en su lugar original. Me da tanto la versión modificada como la versión original como esta:

Este es un ejemplo de Perl
Este es un ejemplo de Python
Este es otro ejemplo de Perl
Este es un ejemplo de Perl
Este es un ejemplo de Python
Este es otro ejemplo de Perl

¿Cómo debo solucionar mi problema? ¿Algún puntero? Gracias como siempre :)

ACTUALIZAR

¡Problema resuelto! Muchas gracias a@Zaidy@cjm :)

Aquí está el código que funciona de maravilla:

while ( defined (my $paragraph = $enumerate->Next()) ) {

    my $words = Win32::OLE::Enum->new( $paragraph->{Range}->{Words} );

    while ( defined ( my $word = $words->Next() ) ) {

        my $font = $word->{Font};
        $font->{Bold} = 1 if $word->{Text} =~ /Perl/;
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta