我的Perl程序似乎成功打开了我希望它读取的文本文件,但它没有使用代码中文本文件中的信息。
#!/usr/bin/perl
use strict;
use warnings;
sub gcd_iter($$) {
my ( $u, $v ) = @_;
while ( $v ) {
( $u, $v ) = ( $v, $u % $v );
}
return abs( $u );
}
my $gcdcount = 0;
my $filename = "Integers1.txt";
open( my $fh, "<", $filename ) or die( "Can't open file $filename, $!" );
while ( my @integers = <$fh> ) {
my $value1 = shift( @integers );
my $value2 = shift( @integers );
my @trngpair = ( $value1, $value2 );
if ( gcd_iter( $value1, $value2 ) == 1 ) {
$gcdcount++;
}
}
print "$gcdcount\n";
close $fh;
程序没有打印配对数组或正确的gcdcount。我让程序做了两次类似的事情并且gcdcount计算得当,但对于这个,它不是。每次运行程序时,输出都会读取gcdcount为0。 gcd计算的子程序在代码中更进一步。
输入文件通常是2000行随机生成的整数,但可以使用以下方法生成问题:
83
399
2
343
267
120
893
33
答案 0 :(得分:1)
<$fh>
读取文件的其余部分并计算每行的标量。
这意味着my @integers = <$fh>;
在第一次评估时会读取文件的其余部分。第二次循环,没有什么可读的。
替换
while (my @integers = <$fh>) {
与
chomp( my @integers = <$fh> );
while (@integers) {
#!/usr/bin/perl
use strict;
use warnings;
sub gcd_iter($$) {
my ($u, $v) = @_;
while ($v) {
($u, $v) = ($v, $u % $v);
}
return abs($u);
}
my $gcdcount = 0;
my $filename = "Integers1.txt";
open (my $fh, "<", $filename) or die("Can't open file $filename, $!");
chomp( my @integers = <$fh> );
while (@integers) {
my $value1 = shift(@integers);
my $value2 = shift(@integers);
my @trngpair = ($value1, $value2);
if (gcd_iter($value1,$value2)==1) {
$gcdcount++;
}
}
print "$gcdcount\n";
close $fh;