从文本文件中读取并将信息放入数组中

时间:2017-09-26 18:16:11

标签: perl split

我正在尝试使用random.org计算真随机数的GCD并从文本文件中获取这些数字。这是一个用我之前创建的PRNG完成上述程序的程序。

#!/usr/bin/perl
use strict;
use warnings;
my $range = 100;
my $gcdcount = 0;
sub gcd_iter($$) {
    my ($u, $v) = @_;
    while ($v) {
       ($u, $v) = ($v, $u % $v);
    }
    return abs($u);
}
for (my $count=0; $count<=5000; $count++) {
    my $random_numx = int(rand($range));
    my $random_numy = int(rand($range));
    my @pair = ($random_numx, $random_numy);
    if (gcd_iter($random_numx, $random_numy) == 1) {
        $gcdcount++; 
    }
}
print "The GCD Count for PRNG #1 is $gcdcount\n";

我几乎做了同样的事情,但从文本文件中获取数字。我如何将这些数字对转换为一种格式,我可以为其分配变量,以便在分割线后将它们放入公式中?以下是我到目前为止的情况:

my $filename = 'xxxxx';
open(my $fh, $filename)
or die "Could not open file '$filename' $!";
sub gcd_iter($$) {
     my ($u, $v) = @_;
     while ($v) {
         ($u, $v) = ($v, $u % $v);
    }
    return abs($u);
}
for (my $count=0; $count<=5000; $count++) {
     if (gcd_iter($) == 1) {
         $gcdcount++; 
     }
}
while (my $row = <$fh>) {
    chomp $row;
    foreach ($row) {
        my @pair = split('s+', $_);     
    }
}

1 个答案:

答案 0 :(得分:0)

您走在正确的轨道上,但可以通过输入

获益
perldoc -f split

Perl具有出色的内置文档。 我会改变你的界限:

foreach ($row) {
  my @pair = split('s+', $_);
}

为:

my @pair = split(/\s+/, $row);

并将$num1$num2设置为$pair[0]$pair[1] ...或只是使用:

my ($num1, $num2) = split(/\s+/, $row);

直接获取您感兴趣的两个标量。
换句话说,您不需要foreach $row行(您已经拥有$row),而\s是空格的简写模式匹配。 祝你好运,玩得开心!