Wie wende ich mit Win32 :: Ole in Perl die Formatierung auf ein bestimmtes Wort in einer docx-Datei an?

Zum Beispiel enthält meine docx-Datei die folgenden Sätze:

Dies ist ein Perl-Beispiel
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl-Beispiel

Ich möchte allen Vorkommen des Wortes "Perl" einen fett gedruckten Stil zuweisen:

Das ist ein Perl example
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl example

Ich habe mir bisher folgendes Skript ausgedacht:

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;

Aber es wurde der gesamte Absatz fett formatiert und die Sätze werden nicht an ihrer ursprünglichen Stelle bearbeitet. Es gibt mir sowohl die geänderte Version als auch die Originalversion wie folgt:

Dies ist ein Perl-Beispiel
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl-Beispiel
Dies ist ein Perl-Beispiel
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl-Beispiel

Wie soll ich mein Problem beheben. Irgendwelche Hinweise? Danke wie immer:)

AKTUALISIERE

Problem gelöst! Vielen Dank an@ Zaid, und@ cjm:)

Hier ist der Code, der wunderbar funktioniert:

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/;
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage