#!/usr/bin/perl use warnings; use strict; use Win32::Clipboard; use Win32::OLE; my $cb = Win32::Clipboard; my $voice = Win32::OLE->new("Speech.VoiceText") or die("TTS failed"); $voice->Register("", "$0"); $voice->{Enabled} = 1; $voice->{Speed}=180; $cb->Empty(); sub say { my $text = shift; $voice->speak($text, 1); sleep 1 while $voice->IsSpeaking; } say <GetText(); next unless length $text; say $text; $cb->WaitForChange; }