Thanks for the response-I think that's got it. I must have tried everything but the correct approach, which looks so obvious after the fact.
One small question. In your sample code below, what format can I use to refer to the individual members of the array referenced by $array in the "each" loop? --I know that @$array will produce all members of the array within the hash--how do I refer to the individual members of this array reference, however big it might be--1 to whatever number of elements. In other words, if @$array for server01 contains "SUCCESS Today's Date Other Details" and "WARNING Today's date Other", how do I refer to array0 and array1 properly in a loop so I can deal with each one separately---I know it isn't @$array[0] and @array$[1] because of the errors I get, so it must be something else, ->[0], ->[1] but see the following warning even though it gives me a result (this is a loop following the grabbing of the $server and $array in the while/each loop snippet you sent---- foreach my $i (@$array) { print "Detail: @$array->[$i]\n"; #Produces the following warning: Argument "SUCCESS06/01/2003What wasn't done before\n" isn't numeric in array ele ment at C:\local\win32app\EventLog\EventDumperinPerl\ha.pl line 29, <DATA> line 5. Detail: WARNING06/01/2003Here are some details Thanks again. ------------------------------------------------ On Mon, 4 Aug 2003 17:09:40 -0400 , Smith Jeff D <[EMAIL PROTECTED]> wrote: > This is a request for insight on structuring data from a log file for > later retrieval and stuffing into a mail message. I'm having trouble > trying to set up the proper form of references to store this data. > Here's the source log file format(line numbers are shown for > clarification): > > Line1: StatusField Server Name Field TimeStamp OtherStuff > Line2 SUCCESS server01 Today's date Other details... > Line3 WARNING server22 Today's date Other details...: > Line4 SUCCESS server22 Today's date Still other > details... > Line5 WARNING server55 Today's date Other > details.... > Line6 WARNING server01 Today's date Other > details.... > > .... > > And so on > > Each line can have the same server, timestamp and details are another > line with the same server name--there are no complete duplicates of > any line but lines could Have the same server name and timestamp but > differ on the status field for certain detail items. > > I want to associate all lines from a particular server together so > that I can mail copies of the lines in the log reports to particular > addresses based on reading another file that contains a > servername-->mailaddress association. > > I thought that I would read all the lines into an array, sort them by > the server name so that all the records (lines) for a particular > server are next to each other, loop through the records one by one, > splitting each line into its individual columns, reading the other > file of > servername->mailaddresses to grab the mailaddress and after the > servername->servername > changes, send the array of lines to a mailer. I can do the latter > part fine if I only have one line per server. But since there can be > multiple lines per server, I'm stumped how to set the data structure up. > > What I'm having a problem with is figuring out how to store the lines > for a particular server in a structure that I can use as the basis of > the mail message--I thought I wanted a hash of array references but > can't figure out to do that without having a hard reference to an > array for each server (that'd require hundreds of names and it appears > to be a stupid approach to associate the structure with the values in > the data. I think I want some form of anonymous array that can be > referenced by a hash based on servername but can't seem to figure out > how to get it set up correctly. It must be a mental block on the > correct form of hash of arrays where the hash key is the servername > and the value is an array of all arrays/records that contain the > servername but... > > Sounds like you have a decent approach, I like your second idea better than storing everything to an array and then sorting by server name. Your hash idea will take care of that for you and you probably want to avoid the double memory usage of storing all data to an array first, and avoid the CPU intensive operation of sorting (not to mention you lose your date/time sequence)....so having a look at your second option, something along the lines of: my $servers = {}; while (my $line = <READLOG>) { my @line = split(/ /, $line); push @{$servers->{$line[1]}}, $line[2]; } At this point you have a hash reference where the keys are the server names and the value is an array (reference) of lines from the log file. The key is to recognize I start out with $servers being a hash reference. Then for each line of the file I append (push) to an array reference stored as the value of the hash key. Then to access the contents of the servers: while (my ($server, $array) = each(%$servers)) { # send message where $server is the server name # and $array is an array reference of log lines my $to = $config{$server}; my @body = @$array; } This is just pseudo-code that you will need to flesh out with what you actually want and message code, etc. But it should give you idea of how to setup the structure. The following might help as well if you haven't already read them: perldoc perlreftut perldoc perlref perldoc perllol perldoc perldsc And you may want to check out the Data::Dumper module to help you debug. It allows you to print a data structure in readable format to see if you really have what you want (though I suggest starting with a small sample of data in your case). perldoc Data::Dumper Then come back when you get frustrated or hit a snag. http://danconia.org -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]