Re: assign default value to variables I assign from split

[email protected] ("John W. Krahn")
Newsgroups perl.beginners
Message-ID <[email protected]>
Richard Lee wrote:
> Dr.Ruud wrote:
>>
>> But better stop guessing and let Richard answer.
> 
> yes, variables are particular names and later I wanted to refer back by 
> variable names.
> 
> However, for now I have done this so far so I just added as array 
> instead of breaking out by var names..
> -- code is incomplete (meaning I haven't finished yet) --
> 
> use warnings;
> use strict;
> use Data::Dumper;
> 
> my $directory = q#/home/server1/arch#;
> my @array = qx/ls -tr $directory | tail -1/;

You are only getting one file name (tail -1) so why are you assigning it 
to an array?  It would be more efficient to do that directly in perl. 
Also you haven't removed the newline.


> my @hh;
> for ( @array ) {
>        my $file = $_;

Usually written as:

for my $file ( @array ) {

Since @array only has one file name in it why do you need the loop?


>        open FILE, "ls -tr | zcat -d $directory/$file |", or die qq/you 

My version of zcat does not have a -d switch, what does it do on your 
system?  It appears that "ls -tr | " in front of zcat is superfluous? 
What do you think it will do there?


> truly suck $!\n/;
>        my $count;
>        my %hh;
>        while (<FILE>) {
>             chomp;
>             next if /^$/;
>             next if /^#/;
>  
>             my @array   = map $_||'default', (split 

Why does this array have the same name as the other array in file scope?


> /\|/)[3,4,6,7,12,40,41,42,43,46,56,64];
>             next if $array[0] eq 'default';
>             $array[10] =~ s/\,/\-/g;

More efficient as:

              $array[10] =~ tr/,/-/;


>             push @hh, \@array;
>        }
>        close FILE;

When you close a piped open you should verify that the pipe closed 
correctly:

          close FILE
              or warn $! ? "Error closing ls pipe: $!"
                         : "Exit status $? from ls";


> }
> 
> system("clear");
> print 
> "===================================================================================================\n\n"; 
> 
> 
> my %missing_address;
> my %duration_report;
> 
> for (@hh) {
>    my $yahoo = $_;

Usually written as:

for my $yahoo ( @hh ) {


>    $missing_address{$$yahoo[1]}++ if $$yahoo[8] =~ /^default$/ and 
> $$yahoo[0] != m/espn|google|msn/;
>    $$yahoo[4] +=

$$yahoo[] is usually written as $yahoo->[].

$$yahoo[8] =~ /^default$/ is usually written as $yahoo->[8] eq 'default'.

$$yahoo[0] != m/espn|google|msn/ is incorrect, you probably meant 
$yahoo->[0] !~ m/espn|google|msn/.


> }
> 
> if (%missing_cics) {
>   for (keys %missing_address) {
>       print "MISSING ADD: $_ : $missing_address{$_} \n";
>   }
> }
> 
> for (keys %duration_report) {
>     print "total duration $_  : $duration_report{$_}\n";
> }


John
-- 
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order.                            -- Larry Wall
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.