please Explain

next if $line =~ /^-/;
  my @f = split('\s*\|\s*',$line);
  next unless scalar @f == 8;



On Fri, Jun 27, 2014 at 6:44 PM, Uday Vernekar <vernekaru...@gmail.com>
wrote:

> Thanks to all........cheers
>
>
> On Thu, Jun 26, 2014 at 10:28 PM, Jim Gibson <jimsgib...@gmail.com> wrote:
>
>>
>> On Jun 26, 2014, at 2:05 AM, Uday Vernekar wrote:
>>
>> > Please suggest if any Corrections Needed.
>>
>> There are several improvements you could make.
>>
>> >
>> > [code]
>> > #!/usr/bin/perl
>> >
>> > use 5.10.0;
>> > use strict;
>> > use warnings;
>> >
>> #########################Pattern############################################
>> > #U/A/S|Test|            Test           |Loop | Run |Pass |Fail |
>>  Arguments
>> > #     | #  |            Name           |Count|Count|Count|Count|
>> >
>> #-----+----+---------------------------+-----+-----+-----+-----+-----------
>> > #     |  72| Traffic Test              |    1|  561|  560|    1| (none)
>> >
>> ############################################################################
>> > my $pattern;
>>
>> "$pattern" is not a good variable name for holding a string that matches
>> some pattern. The 'pattern' is embedded in your regular expression. I would
>> use something like "$match" or $found.
>>
>> > open (my $Log_file, '<', '/tmp/EO-PCPE-23-10GT') || die "Couldn't open
>> /tmp/EO-PCPE-23-10GT\n\t $!";
>>
>> When posting programs to a mailing list, you can use the special <DATA>
>> file handle and put the lines at the end of your program after a line
>> containing just a '__DATA__' marker. That way, people who do not have
>> access to your data file will be able to run your program.
>>
>> > while(<$Log_file>)
>>
>> It is usually better to use explicit variables:
>>
>>   while( my $line = <$Log_file> ) {
>>     if( $line =~ ... ) {
>>
>> > {
>> >
>> > if($_ =~
>> m/^(.+?)\|(.+72)\|(.+?)\|(.+?)\|(.+[0-9]|[0-9]|[0-9])\|(.+[0-9]|[0-9]|[0-9])\|(.+?)\|(.+?)$/)
>>
>> This reqular expression is very long and hard to read. You seem to want
>> match any line that:
>>
>> 1. Has seven '|' characters delimiting eight fields.
>> 2. Has '72' in field 2.
>> 3. Has numbers in fields 5 and 6.
>>
>> I would recommend first splitting the line, then checking the individual
>> fields for their desired content.
>>
>> In addition, the regex fragment '(.+[0-9]|[0-9]|[0-9])' may not be doing
>> what you think. This fragment will match:
>>
>> 1. At least one character followed by a digit (0-9) OR
>> 2. A digit (0-9) OR
>> 3. A digit (0-9)
>>
>> The | character is alternation. You seem to be treating it as
>> concatenation. The second and third alternatives are identical, and the
>> third one is redundant.
>>
>> If you want to match three successive digits, these will all work:
>>
>> [0-9][0-9][0-9]
>> [0-9]{3}
>> \d\d\d
>> \d{3}
>>
>>
>> > {
>> >  $pattern=$_;
>> >
>> >
>> > }
>> >
>> > }
>> > print "Pattern Found:\n$pattern";
>> > my $uas=(split /\|/, $pattern)[0];
>> > $uas =~ s/^\s+//;
>> > my $test=(split /\|/, $pattern)[1];
>> > $test =~ s/^\s+//;
>> > my $test_name=(split /\|/, $pattern)[2];
>> > $test_name =~ s/^\s+//;
>> > my $loop_count=(split /\|/, $pattern)[3];
>> > $loop_count =~ s/^\s+//;
>> > my $run_count=(split /\|/, $pattern)[4];
>> > $run_count =~ s/^\s+//;
>> > my $pass_count=(split /\|/, $pattern)[5];
>> > $pass_count =~ s/^\s+//;
>> > my $fail_count=(split /\|/, $pattern)[6];
>> > $fail_count =~ s/^\s+//;
>> > my $arguments=(split /\|/, $pattern)[7];
>> > $arguments =~ s/^\s+//;
>>
>> You can perform the split only once. You can also include optional
>> whitespace in the delimiter string, which means the saved substrings will
>> not include the whitespace:
>>
>>   my( $uas, $test, $test_name, $loop_count, $run_count, $pass_count,
>> $fail_count,
>>     $arguments ) = split('\s*\|\s*',$line);
>>
>> > print '-' x 30, "\n";
>> > print "      Test Data       \n";
>> > print '-' x 30, "\n";
>> > print "UAS : $uas\n";
>> > print "Test : $test\n";
>> > print "Test Name : $test_name\n";
>> > print "Loop Count : $loop_count\n";
>> > print "Run Count : $run_count\n";
>> > print "Pass Count : $pass_count\n";
>> > print "Fail Count : $fail_count\n";
>> > print "Arguments : $arguments\n";
>> > print '-' x 30, "\n";
>> > print "      RESULTS       \n";
>> > print '-' x 30, "\n";
>>
>> You can use a 'HERE' document to print these lines:
>>
>>     print <<EOS;
>> ------------------------------
>>       Test Data
>> ------------------------------
>> UAS : $uas
>> Test : $test
>> Test Name : $test_name
>> Loop Count : $loop_count
>> Run Count : $run_count
>> Pass Count : $pass_count
>> Fail Count : $fail_count
>> Arguments : $arguments
>> ------------------------------
>>       RESULTS
>> ------------------------------
>> EOS
>>
>>
>> So putting that altogether, here is an improved program:
>>
>> [code]
>>
>> #!/usr/bin/env perl
>> use strict;
>> use warnings;
>> while( my $line = <DATA> ) {
>>   chomp($line);
>>   next if $line =~ /^-/;
>>   my @f = split('\s*\|\s*',$line);
>>   next unless scalar @f == 8;
>>   my( $uas, $test, $test_name, $loop_count, $run_count, $pass_count,
>> $fail_count,
>>     $arguments ) = @f;
>>   if( $test eq '72' ) {
>>     print <<EOS;
>> ------------------------------
>>       Test Data
>> ------------------------------
>> UAS : $uas
>> Test : $test
>> Test Name : $test_name
>> Loop Count : $loop_count
>> Run Count : $run_count
>> Pass Count : $pass_count
>> Fail Count : $fail_count
>> Arguments : $arguments
>> ------------------------------
>>       RESULTS
>> ------------------------------
>> EOS
>>     if( $fail_count != 0 && $run_count >= 0 ) {
>>       print "Result: Fail\n";
>>     }elsif( $fail_count == 0 && $run_count > 0 ) {
>>       print "Result: Pass\n";
>>     }
>>   }
>> }
>> __DATA__
>> U/A/S|Test|            Test           |Loop | Run |Pass |Fail |  Arguments
>>      | #  |            Name           |Count|Count|Count|Count|
>> -----+----+---------------------------+-----+-----+-----+-----+-----------
>>      |  72| Traffic Test              |    1|  561|  560|    1| (none)
>>
>> [code]
>>
>>
>> --
>> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
>> For additional commands, e-mail: beginners-h...@perl.org
>> http://learn.perl.org/
>>
>>
>>
>
>
> --
> *********************************************************
> Don't ask them WHY they hurt you,
> because all they'll tell you is lies and excuses.
>  Just know they were wrong, and try to move on.
> **********************************************************
>



-- 
*********************************************************
Don't ask them WHY they hurt you,
because all they'll tell you is lies and excuses.
 Just know they were wrong, and try to move on.
**********************************************************

Reply via email to