Perl:打印标准输入中数字最大的行



我对Perl很陌生,我一直在尝试实现一个函数,从标准输入中打印出最大数字的行。例如,如果输入是:

你好,我 18 岁

1 今年是 2019 1

1 2 3 - 4

输出应为:1 今年是 2019 1

其次,我想知道$line=~/-?(?:\d+.?\d*|.\d+(/g 是什么意思?

以下是我尝试过的,它不起作用,我希望有人可以为我修复它。我正在努力过滤掉随机字符但省略数字。

是否有必要将最大的数字推到数组上?有没有办法让我们一步到位?

#!/usr/bin/perl -w
while ($lines = <STDIN>){
    @input = $lines =~ /d+/g;
    if (!@input){
    } else {
        $largest_number = sort {$a <=> $b} @input[0];
        push(@number, $largest_number);
    }
}
    if (!@number){
    }else{
        print $largest_number;
    }

@input[0]只返回数组中的第一个值。您可能希望改用@input - 但这样您就可以从一行中获取排序的数字。此外,您需要将整行存储在某个地方,以便以后能够显示它。

以下是我会怎么做:

#!/usr/bin/perl
use warnings;
use strict;
my @max;
while (my $line = <>) {
    my @numbers = $line =~ /d+/g;
    for my $n (@numbers) {
        if (! @max || $n > $max[0]) {
            @max = ($n, $line);
        }
    }
}
print $max[1] if @max;

@max数组存储$max[0]的最大数字,而$max[1]则保留整条线。您只需将每个数字与最大的数字进行比较,无需搜索每行的最大值。

要存储包含最大数字的所有行,请将循环主体更改为

        if (! @max || $n > $max[0]) {
            @max = ($n, $line);
        } elsif ($n == $max[0]) {
            push @max, $line;
        }

和最后一行

print @max[ 1 .. $#max ] if @max;

最新更新