use strict; use warnings; use Win32::OLE::Const 'Microsoft Word'; my $query = 'perl'; my $file = "E:/test.doc"; my $Word = Win32::OLE->new('Word.Application', 'Quit'); $Word->{'Visible'} = 0; my $doc = $Word->Documents->Open($file) or die "Error opening the document!\n"; my $paragraphs = $doc->Paragraphs() ; my $enumerate = new Win32::OLE::Enum($paragraphs); while ( defined (my $paragraph = $enumerate->Next()) ) { my $words = Win32::OLE::Enum->new( $paragraph->{Range}->{Words} ); while ( defined ( my $word = $words->Next() ) ) { my $text = $word->{Text}; if ($text =~ /$query/){ #$text->Select; $Doesn't work $paragraph->Select; #wrong page number. my $page_number = $Word->Selection->Information(wdActiveEndPageNumber); print "Found $text in Page $page_number!\n"; } } } $Word->ActiveDocument->Close ; $Word->Quit;