我有两个文件myresult和annotation。这些文件的详细信息如下。 myresult:
288..639 1.13075739182609-6.20035408429888i
300..651 1.90372125344918-6.09008858828515i
312..663 1.6908117147722-5.67058877579329i
324..675 0.644484787809351-5.54571698740166i
336..687 1.21850904281332-5.47700589647424i
注释:
272..1042
1649..2629
For loop在满足If条件后仅运行一次。即使满足条件,它也不会再循环进入循环。例如,在文件myresult第二行满足条件即数字300..651位于文件注释的第一行范围内,因此它打印所有值从300到651.但是当它需要进入下一轮时(第3行) )即312..663它没有进入这个循环,因为这个范围也位于文件注释的第一行。 因此输出应该是300到663之间的数字,但它仅从300到651打印。 代码:
#!/usr/bin/perl
use Math::Complex;
open( $inp0, "<myresult" ) or die "not found";
open( $inp2, "<annotation" ) or die "not found";
my @arr2 = <$inp0>;
my @arr4 = <$inp2>;
my @result;
foreach my $line1 (@arr2) {
my ( $col1, $col2 ) = split( /\s/, $line1 );
if ( $col2 > 1.60 ) {
my ( $from1, $to1 ) = split( /\.\./, $col1 );
foreach my $line2 (@arr4) {
my ( $from2, $to2 ) = split( /\.\./, $line2 );
for ( my $i = $from1; $i <= $to1; $i++ ) {
for ( my $j = $from2; $j <= $to2; $j++ ) {
$res = grep( /$i/, @result );
if ( $i == $j && $res == 0 ) {
print "$i \n";
push( @result, $i );
}
}
}
}
}
}
答案 0 :(得分:2)
文件“myresult”的第二列包含复数,例如“1.13075739182609-6.20035408429888i”。
无法比较两个复数。 (复数是具有实轴和虚轴的复平面矢量。两个矢量无法像整数那样进行比较。)
对于“myresult”文件中的所有数据,'($ col2&gt; 1.60)'将为false。这就是为什么不执行循环。
答案 1 :(得分:0)
正如富姆所说,无法比较两个复数。
如果您需要有关Perl中复数的帮助,请查看Math::Complex模块。