Not sure about the else branch. If my assumption of printing the unchanged data is correct, then there are further simplifications possible.
use strict; use warnings; my $threshold = 1000; # being lazy: my @file_array = map { [ split /\s+/ ] } <DATA>; for( my $i=0; $i<@file_array-2; $i+=2 ) { if( $file_array[$i ][3]-$file_array[$i+2][2] < $threshold and $file_array[$i+1][3]-$file_array[$i+3][2] < $threshold ) { print "$file_array[$i ][0] $file_array[$i ][2] $file_array[$ +i+2][3]\n"; print "$file_array[$i+1][0] $file_array[$i+1][2] $file_array[$ +i+3][3]\n"; } else { # not sure print "$file_array[$i ][0] $file_array[$i ][2] $file_array[$ +i ][3]\n"; print "$file_array[$i+1][0] $file_array[$i+1][2] $file_array[$ +i+1][3]\n"; } } print "$file_array[-2][0] $file_array[-2][2] $file_array[-2][3]\n"; print "$file_array[-1][0] $file_array[-1][2] $file_array[-1][3]\n"; __DATA__ link1 myco1 16 13013 color=chr1 link1 myco2 7419028 7432025 color=chr1 link2 myco1 13016 31245 color=chr1 link2 myco2 7432026 7450255 color=chr1 link3 myco1 31569 50386 color=chr1 link3 myco2 7450876 7469693 color=chr1 link4 myco1 53241 82019 color=chr1 link4 myco2 7472518 7501295 color=chr1 link5 myco1 82667 85039 color=chr1 link5 myco2 7511397 7513769 color=chr1 link6 myco1 85052 162535 color=chr1 link6 myco2 7513770 7591243 color=chr1 link7 myco1 3519888 3527802 color=chr10 link7 myco2 6192981 6200895 color=chr10 link8 myco1 3531711 3535088 color=chr10 link8 myco2 6200982 6204356 color=chr10 link9 myco1 3537764 3568351 color=chr10 link9 myco2 6204393 6234981 color=chr10 link10 myco1 3585050 3670398 color=chr10 link10 myco2 6236328 6321680 color=chr10
In reply to Re^3: problem in for loop
by hdb
in thread problem in for loop
by MVRS
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |