Hello again mmazlan67,

if you use seek you still go in direction of complexity while will be better to semplify your program flow filling a @results array.

As general rule when you can avoid to read or to write to a file do it: filesystem is the sloooowest part of your PC and expose you to more errors.

If I understand your needs you just need one file to read from: use it and close it as soon as possible.

I propose below an example program very similar to what already showed: I need to guess about your data and so the regex part is surely to be reviewed (but see my comment about your regexes!).

I also added a bit of debug to the screen and the mail composition using CDO.sys windows component: usig OLE object is not so funny but is better than piping a mail into an external program, imho.

I wish you to learn something from my code and go to perldoc for everything you possibly do not understand like $0 $. $1 $2 ...

have fun!

# 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 n +eed: 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 = <STDIN>; 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 [$filetor +ead]!"; 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 ri +ght thing # but it is safer to close them anyway (good habit) close $readhandle; # again someting useful to check: exit the program if nothing was foun +d 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/smtpserverpo +rt"}=25; $fields->Update(); $mail->{Configuration} = $conf; $mail->Send()|| warn Win32::OLE->LastError();

L*

There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

In reply to Re^7: How to ask user for file name and save the output to a new text file -- code sample by Discipulus
in thread How to ask user for file name and save the output to a new text file by mmazlan67

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.