perl - (empty?) return of readline is not caught by control structure -


i have multidimensional hash containing opened file handles on seek_end intention read latest line without getting i/o (what tail).

i'm going through of these handles for loop , calling readline on them.

it looks this:

for $outer ( keys %config ) {      $line = readline($config{$outer}{"filehandle"});      if (not defined $line || $line eq '' ){         next;     }     else{         print "\nline: -->".$line."<--\n";         $line =~ m/(:)(\d?\.?\d\d?\d?\d?\d?)/;         $wert = $2;     } } 

if new content written these files, script reads , behaves planned.

the problem readline return nothing because there nothing @ end of file, if doesn't seem identify empty return of readline undef empty -- prints nothing, right because there nothing in string, don't want processed @ all.

this operator precedence problem. have used mixture of low-priority not high-priority || condition

not defined $line || $line eq '' 

is parsed as

not(  defined($line)  ||  ($line eq '')  ) 

which wrongly negates $line eq '' part

it safer use lower-priority and , or, , not on &&, ||, , !, mixture bad idea

you can write either

if (not defined $line or $line eq '' ) {     ... } 

or

if ( ! defined $line || $line eq '' ) {     ... } 

then well


i prefer see written this, because loses unnecessary else clause , next statements, , discards lines contain space characters

also note iterate on values of hash. using keys wasteful when used access values. able think of better name loop control variable $item

and there's no need concatenation operator when perl interpolate variables directly double-quoted strings

for $item ( values %config ) {      $line = readline( $item->{filehandle} );      if ( defined $line ,  $line =~ /\s/ ) {          print "\nline: -->$line<--\n";          $line =~ m/(:)(\d?\.?\d\d?\d?\d?\d?)/;         $wert = $2;     } } 

Comments

Popular posts from this blog

magento2 - Magento 2 admin grid add filter to collection -

Android volley - avoid multiple requests of the same kind to the server? -

Combining PHP Registration and Login into one class with multiple functions in one PHP file -