Johnson, Reginald (GTS) wrote: > > I am trying to split and entry from hash and keep getting the following > warning "Use of implicit split to @_ is deprecated at ./chargeback line > 34." > I'm not sure how to correct this. What I want the code to do is take the > input file and get a hash of the node names. I did this to eliminate > duplicates. > Then I use "if exist" to get the sumbytes for each node. My final > output should be the nodename and the total bytes for the node. > > I read the perldoc -f on split but it didn't give that "ahh" moment for > what I am doing wrong. > > My input > tsmpa1,2008-06-05 09:00:03.000000,2008-06-05 > 09:00:05.000000,BACKUP,35453,MPTELCLTS001,Tcp/Ip,,MPLTTALTS001_2HOUR,138 > ,2,0,400180,0,0,1,YES,,,,,0, > tsmpa1,2008-06-05 09:00:04.000000,2008-06-05 > 09:00:10.000000,BACKUP,35455,MPLTTALTS001,Tcp/Ip,,MPLTTALTS001_2HOUR,210 > 8,2,0,873337,1,0,1,YES,,,,,0, > tsmpa1,2008-06-05 10:00:23.000000,2008-06-05 12:20:01.000000,STGPOOL > BACKUP,295,DIR_DISK -> > DIR_COPY_TE,,,DIR_DISK_BKUP,36865,36865,0,60157952,0,25,1,YES,,,, > ,0, > tsmpa1,2008-06-05 10:26:36.000000,2008-06-05 > 10:29:37.000000,BACKUP,35696,MPLTTABUSADM01,Tcp/Ip,,,0,1,0,754280,0,0,1, > YES,,,,,180, > tsmpa1,2008-06-05 10:29:41.000000,2008-06-05 > 10:30:06.000000,BACKUP,35705,MPLTTABUSDAT02,Tcp/Ip,,,0,1,0,46088500,0,0, > 1,YES,,,,,22, > tsmpa1,2008-06-05 10:29:42.000000,2008-06-05 > 10:29:47.000000,BACKUP,35708,MPLTTABUSDAT10,Tcp/Ip,,,0,1,0,47606106,0,0, > 1,YES,,,,,3, > tsmpa1,2008-06-05 10:29:42.000000,2008-06-05 > 10:29:58.000000,BACKUP,35707,MPLTTABUSDAT01,Tcp/Ip,,,0,1,0,45704386,0,0, > 1,YES,,,,,14, > tsmpa1,2008-06-05 10:29:42.000000,2008-06-05 > 10:29:58.000000,BACKUP,35709,MPLTTABUSDAT01,Tcp/Ip,,,0,1,0,46011159,1,0, > 1,YES,,,,,13, > tsmpa1,2008-06-05 10:29:42.000000,2008-06-05 > 10:30:04.000000,BACKUP,35711,MPLTTABUSDAT04,Tcp/Ip,,,0,1,0,46056905,0,0, > 1,YES,,,,,19, > tsmpa1,2008-06-05 10:29:42.000000,2008-06-05 > 10:30:04.000000,BACKUP,35706,MPLTTABUSDAT05,Tcp/Ip,,,0,1,0,56903405,0,0, > 1,YES,,,,,20, > tsmpa1,2008-06-05 10:29:42.000000,2008-06-05 > 10:30:05.000000,BACKUP,35710,MPLTTABUSDAT09,Tcp/Ip,,,0,1,0,45471886,1,0, > 1,YES,,,,,20, > tsmpa1,2008-06-05 10:29:43.000000,2008-06-05 > 10:29:58.000000,BACKUP,35725,MPLTTABUSDAT03,Tcp/Ip,,,0,1,0,46047982,2,0, > 1,YES,,,,,10, > tsmpa1,2008-06-05 10:29:43.000000,2008-06-05 > 10:29:59.000000,BACKUP,35722,MPLTTABUSDAT09,Tcp/Ip,,,0,1,0,45182840,2,0, > 1,YES,,,,,13, > tsmpa1,2008-06-05 10:29:43.000000,2008-06-05 > 10:30:00.000000,BACKUP,35714,MPLTTABUSDAT09,Tcp/Ip,,,0,1,0,46098890,0,0, > 1,YES,,,,,15, > tsmpa1,2008-06-05 10:29:43.000000,2008-06-05 > 10:30:01.000000,BACKUP,35726,MPLTTABUSDAT03,Tcp/Ip,,,0,1,0,46155077,0,0, > 1,YES,,,,,14, > ~ > Code > > #!/usr/bin/perl > use strict; > use warnings; > > &open_files; > #*********************************************************************** > ******** > sub open_files { > open(SUMMARY, "<", "/home/johnsre/sum_file" ) or > die "Summary file could not be opened: $!"; > my %nodename_Hash=(); > my $total_for_node = 0; > while (<SUMMARY>) { > my ($sumdate,$sumactivity,$sumnode,$sumbytes) = (split > /,/)[1,3,5,12]; > print "$sumdate,$sumactivity,$sumnode,$sumbytes\n"; > chomp($sumnode); > $nodename_Hash{ $sumnode} = "$sumnode,$total_for_node"; > } #end while > my ($key,$value); > for $key (keys %nodename_Hash) { > $value = $nodename_Hash{$key}; > print "$key => $value\n" > }#for > close(SUMMARY); > open(SUMMARY, "<", "/home/johnsre/sum_file" ) or > die "Summary file could not be opened: $!"; > my $temp_value=0; > while (<SUMMARY>) { > my $temp_node; > my ($sumdate,$sumactivity,$sumnode,$sumbytes) = (split > /,/)[1,3,5,12]; > if (exists $nodename_Hash{$sumnode} ) { > my $line; > $line=$nodename_Hash{$sumnode}; > # > $temp_node,$temp_value=split(/,/,$nodename_Hash{$sumnode}); > $temp_node,$temp_value=split(/,/, $line); > print "$sumnode exists sumbytes=$sumbytes > temp_value=$temp_value temp_node=$temp_value $line\n"; > my $new_bytes=0; > $new_bytes =$temp_value+$sumbytes; > $nodename_Hash{$sumnode}= "$sumnode,$new_bytes"; > } > } #end while > for $key (keys %nodename_Hash) { > $value = $nodename_Hash{$key}; > print "$key => $value\n" > }#for > > > close(SUMMARY); > } #close summary
There are a few problems with your code, but the error is because the line $temp_node,$temp_value=split(/,/, $line); should read ($temp_node,$temp_value) = split(/,/, $line); It is hard to know how to improve what you ahve written as you have several variables that are unused, and the subroutine is clearly unfinished. But I would suggest the following: - You subroutine open_files() is way too long - It doesn't open files - it opens one file, twice, and reads the data - Your indenting needs looking at - you shouldn't need to comment closing braces - Try to declare variables closer to where they are used. For instance my ($key,$value); for $key (keys %nodename_Hash) { $value = $nodename_Hash{$key}; print "$key => $value\n" }#for should be for my $key (keys %nodename_Hash) { my $value = $nodename_Hash{$key}; print "$key => $value\n" } Once you have tidied your code a little I'm sure we will be able to help you further. HTH, Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/