Harry Putnam <[EMAIL PROTECTED]> wrote:
: 
: "R. Joseph Newton" <[EMAIL PROTECTED]> writes:
: 
: > > Something like:
: > > [...] snipped getopts and other unrelated stuff
: > >       while(<FILE>){
: > >           chomp;
: > >           my $line = $_;
: >
: > Why here.  Since you are doing this with each line,
: > you could write in the loop control:
: > while (my $line = <FILE>) {
: 
: Not sure I understand the advantage.  In my
: formulation, `$line' is minus the trailing newline...
: which I've found to be nearly always a plus.

    I think Joseph was implying the 'chomp'. This is
still shorter and IMO clearer than using $_.

    while ( my $line = <FILE> ) {
         chomp $line;

 
: > >     ## @hdregs is an array of several regex for the
: > >     ## headers
: > >     for($ii=0;$ii<=$#hdregs;$ii++){
: >
: > Why no space between clauses?  Why no space around assignment
: > operators?
: 
: Just how I've become accustomed to writing code.
: Probably not a good plan for when others need to read and
: revise it.
: 
: > Why a C-style for loop?  Are you using the index somewhere?
: 
: Well yes, sort of.

    Assuming a non-C maintainer comes along, I would
recommend the following. The C-style loop is confusing
to those of us who don't have a background in C. This
is very clear (to me).

    foreach my $ii ( 0 .. $#hdregs ) {


: I wanted a way to ensure that each reg has hit at
: least once.  Otherwise we don't print.  So I used a
: formulation like this (Not posted previously for
: clarity):
: 
:          if ($data{$hdregs[$ii]}++ == 0) {
:            ## it will only be 0 once
:            $hdelem_hit_cnt++; 
:          }
: Then before printing we compare $hdelem_hit_cnt to
: ($#hdregs + 1):
: 
:  sub test_hdr_good {
:     if ($hdelem_hit_cnt == ($#hdregs + 1)) {
:       $test_hdr_good = "TRUE";
:       $hdelem_hit_cnt = 0;

    Generally, global variables should raise a giant,
blinking, annoying sign telling us we an are no
longer in Kansas.


:     }
:  }
: 
: They should be the same if all regs have hit at least
: once.  If not the same... we don't print.

    Actually, they should be the same if all regs were
hit /only/ once.

    Depending on where the 'if' block is located, this
is a roundabout way to test that @hdregs is an array of
unique values. It would be similar to this outside the
'for' loop.

my $test_hdr_good = is_unique( [EMAIL PROTECTED] ) ? 'TRUE' : 'FALSE';

sub is_unique {
    my $array_ref = shift;
    my %hash;
    @hash{ @$array_ref }++;
    return keys %hash == @$array_ref;
}

    But as Randy mentioned, some mail headers are allowed
to appear more than once. Thus making this test invalid.

HTH,

Charles K. Clarkson
-- 
Mobile Homes Specialist
254 968-8328




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to