Jak znaleźć maksymalną liczbę w tablicy Perl

Zadanie. W Perlu program ma tablicę @arr (trzy pierwsze litery od słów "array"). Trzeba znaleźć maksymalną liczbę, która jest w tym masywie.

Najlepszym sposobem na rozwiązanie tego zadania jest użycie funkcji max z biblioteki List::Util. Biblioteka List::Util idzie w parze z Perl, więc jeśli masz Perl, to ta biblioteka jest dostępna raz, dodatkowo nic instalować nie trzeba.

Oto przykład programu, który wyszukuje i wyświetla maksymalną liczbę z tablicy w którym znajdują się liczby:

▶ Run
#!/usr/bin/perl

use List::Util qw(max);

my @arr = (1, 2, -100, 8, 0);

print max(@arr);

Program wypisze na ekran liczba 8. (Uruchom ten kod w przeglądarce ).

Po podłączeniu biblioteki wskazał, że będziemy korzystać z funkcji max: use List::Util qw(max);. Jeśli po prostu podłączyć bibliotekę use List::Util;, program wyświetli błąd Undefined subroutine &main::max called at script.pl line 7..

W tablicy nie ma ani jednego elementu

W tym przypadku, jeśli w tablicy nie ma ani jednego elementu, to max zwróci undef. Oto przykład programu, która bierze pod uwagę taki przypadek:

▶ Run
#!/usr/bin/perl

use List::Util qw(max);

my @arr;

my $max = max(@arr);

if (defined $max) {
    print $max;
} else {
    print "Empty array";
}

W tym programie zapisujemy wynik funkcji max w zmiennej, jeśli wynik nie undef, to wycofujemy ten wynik, jeśli undef, to wydrukować tekst na ekran.

Tu możemy sprawdzić wynik działania funkcji max, ale można było się dowiedzieć ilość elementów w tablicy , a jeśli liczba elementów 0, wykonać to, co trzeba zrobić w przypadku pustej tablicy.

Praca w przypadku jeśli w tablicy jest polecenia

Podczas pracy z funkcją max z biblioteki List::Util jest haczyk. W rzeczywistości max nie zwraca maksymalną liczbę z tablicy, a element, którego przedstawienie w postaci liczby jest maksymalny.

Oto przykład. Wynik max(-100, 'ABC', -4) będzie ciąg 'ABC'. Dzieje się tak z powodu tego że wartość liczbowa wiersza 'ABC' — to zero, zero — jest to największa wartość w tej tablicy, dlatego wyniki jest element z największą wartością numeryczną. W tym przykładzie jest to wiersz 'ABC'.

Jeszcze jeden przykład. Wynik max(1, 7, '10W') będzie ciąg '10W'.

Oficjalna dokumentacja

Oto fragment danych wyjściowych polecenia perldoc List::Util  o funkcję max:

  max
        my $num = max @list;

    Returns the entry in the list with the highest numerical value. If the
    list is empty then "undef" is returned.

        $foo = max 1..10                # 10
        $foo = max 3,9,12               # 12
        $foo = max @bar, @baz           # whatever

Inne artykuły