Scot Needy wrote:
> 
> Hi;

Hello,

>  Trying to crate a nested hash from variables parsed out of log files but
> as I am a "Beginner Perl' coder it is failing terribly. The basic question
> is given you have 5 variables how would you make a nested hash.
> 
> I hope this is enough code to example my problem.
> -------------- snip ----------------------
> foreach (@wwwlogs) {
>         %time=();
>         ($wwwname,$cust,$YYMMDDay) = split('\.',$_);

The first argument to split is a regular expression.

    my ( $wwwname, $cust, $YYMMDDay ) = split /\./;


>         open (LOG, $_ ) || die "Can't open $_!: $! \n";
>       while (LOG>) {
>       chomp;
>            # Walk through log file and look for our string.
>            ($pid,$hhmmss,$host,$custname,$custsub,$site,$junk) = split('\|',$_);

    my ( $pid, $hhmmss, $host, $custname, $custsub, $site ) = split
/\|/;


>            # print(SPLITVARS= $hhmmss,$host,$custname,$custsub,$site\n);
>            $time=>{$custname}=>{$custsub}=>{$site}=>{$YYMMDDay} = $hhmmss;

You are using the => operator which is the same as a comma when you
should be using the -> operator to dereference hash references.

    $time{$custname}->{$custsub}->{$site}->{$YYMMDDay} = $hhmmss;

Which could also be written as:

    $time{$custname}{$custsub}{$site}{$YYMMDDay} = $hhmmss;


>       } etc etc etc

You can simplify things if you store the log file names in @ARGV instead
of @wwwlogs.

@ARGV = @wwwlogs;
my %time;
while ( <> ) {
    my ( $wwwname, $cust, $YYMMDDay ) = split /\./, $ARGV if $. == 1;
    chomp;
    # Walk through log file and look for our string.
    my ( $pid, $hhmmss, $host, $custname, $custsub, $site ) = split
/\|/;

    # print(SPLITVARS= $hhmmss,$host,$custname,$custsub,$site\n);
    $time{$custname}{$custsub}{$site}{$YYMMDDay} = $hhmmss;

    # etc etc etc

    if ( eof ) {
        close ARGV;
        %time = ();
        }
    }

__END__




John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to