# never forget the following!!! use strict; use warnings; # use diagnostics; # this can be skipped but is useful when starting # if you want to send the mail using the win32 component CDO.sys you need: use Win32::OLE; # grab user input.. # ask for a file to read unless it was specified in the commandline my $filetoread; unless ($filetoread = $ARGV[0]){ print "Enter a filename to read from:\n"; $filetoread = ; chomp $filetoread; # check if the file exists die "File [$filetoread] does not exists or cant be accessed" unless -e $filetoread; } # use an array to accomulate the results my @results; open my $readhandle, '<', $filetoread or die "Unable to read [$filetoread]!"; while (<$readhandle>){ # your first regex is unuseful: # $_ =~ /^\s\s(\S+)*delay\s+(\S+)\s+(\S+)\ .... # you use () which are capturing groups in regexes and populate $1,$2.. # you never use them in your program! # # In your following regex you use: # -->my ( $name,$value ) = m/-name (\S+) (\S+)/; #get the name and value # this does NOT get name nor values # I try to guess your data and then i push in @results array #set goes in $1 $2 $3 $4 if ($_ =~ /\s+(\S+).*-name\s+(\S+)\s(\S+).*mode\s==\s(\S+)/){ # print to console some useful info ($. is the current line number) print "$filetoread:$. match the pattern given\n"; # push into result array a composed string push @results, "$1 $2 $3 $4\n"; } # print to console skipped lines else{ print "skipping line $.\n"; } } # always explicitally close filehandle: Perl will normally does the right thing # but it is safer to close them anyway (good habit) close $readhandle; # again someting useful to check: exit the program if nothing was found unless (@results){ print "Nothing found in file [$filetoread]\nexiting..\n"; exit; } # if here, so there is someting to work with print "Found ", @results, " useful lines\n"; # use the CDO.sys object via Win32::OLE to compose and create the mail # something like (modified/untested) the following: my $mail = Win32::OLE->new("CDO.Message"); $mail->{From}="$0\@yourloaclsystem.org"; $mail->{To}='destination@domain.org'; $mail->{Subject}="results from $0 ".scalar localtime(time); # fill the body foreach my $entry (@results){ $mail->{TextBody}.=$entry; } my $conf = Win32::OLE->new ("CDO.Configuration") ; my $fields = $conf->{Fields}; $fields->{"http://schemas.microsoft.com/cdo/configuration/sendusing"}=2; $fields->{"http://schemas.microsoft.com/cdo/configuration/smtpserver"}="your.usable.smtp.server.or.relayserver.org"; $fields->{"http://schemas.microsoft.com/cdo/configuration/smtpserverport"}=25; $fields->Update(); $mail->{Configuration} = $conf; $mail->Send()|| warn Win32::OLE->LastError();