in reply to Print the line with the largest number from standard input

Hi, welcome to Perl, the One True Religion.

You might like the built-in function length.

You can use it to count the characters in your strings, and then you can keep track of the longest found so far. (Note the use of the __DATA__ section to provide a magical filehandle, and of the angle braces to read its contents into an array of lines, and of chomp to remove the newline character(s) at the end of each line.)

use strict; use warnings; use feature 'say'; my $longest; my $max_length = 0; my @lines = <DATA>; for my $line (@lines) { chomp($line); my $length = length($line); if ( $length > $max_length ) { $longest = $line; $max_length = $length; } } say "'$longest' was $max_length chars"; __DATA__ Hello, i'm 18 1 this year is 2019 1 1 2 3 - 4

Hope this helps!


The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^2: Print the line with the largest number from standard input
by TieUpYourCamel (Scribe) on Jul 22, 2019 at 13:26 UTC
    SSSufe says they need the line with the largest number, not the longest line, so to expand on 1nickt's solution:
    #/usr/bin/perl use strict; use warnings; use feature 'say'; my $lineWithMax; my $max = 0; my @numbers; my @lines = <DATA>; for my $line (@lines) { chomp($line); @numbers = $line =~ /(\d+)/g; foreach my $number (@numbers) { if ( $number > $max ) { $lineWithMax = $line; $max = $number; } } } say "Line with highest number is '$lineWithMax'"; __DATA__ Hello, i'm 18 1 this year is 2019 1 1 2 3 - 4
    The code works with your sample data, but consider the following: If two or more lines contain the same highest number, it will output only the first one. If a line contains a negative number, it will be treated as a positive one (the "-" will be ignored). Only integers are considered. Numbers written with scientific notation, for example, will not be treated correctly (4 x 105 would be considered less than 40) and decimals would be truncated and the remaining digits treated as a new number.

    Today I learned that captured groupings from a regex can be put in an array.

      ... captured groupings from a regex can be put in an array.

      And they don't even have to be captured. Try
          @numbers = $line =~ /\d+/g;


      Give a man a fish:  <%-{-{-{-<

      Oh, hahah, I guess I did a really really bad job of reading the OP. Well I hope the comment was helpful, this seems far more so!


      The way forward always starts with a minimal test.