我对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;