Jak znaleźć minimalną liczbę w tablicy Perl

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

Najlepszym sposobem na rozwiązanie tego zadania jest użycie funkcji min 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 minimalną liczbę z tablicy w którym znajdują się liczby:

▶ Run
#!/usr/bin/perl

use List::Util qw(min);

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

print min(@arr);

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

Po podłączeniu biblioteki wskazał, że będziemy korzystać z funkcji min: use List::Util qw(min);. Jeśli po prostu podłączyć bibliotekę use List::Util;, program wyświetli błąd Undefined subroutine &main::min 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 min zwróci undef. Oto przykład programu, która bierze pod uwagę taki przypadek:

▶ Run
#!/usr/bin/perl

use List::Util qw(min);

my @arr;

my $min = min(@arr);

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

W tym programie zapisujemy wynik funkcji min 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 min, 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ą min z biblioteki List::Util jest haczyk. W rzeczywistości min nie zwraca minimalną liczbę z tablicy, a element, którego przedstawienie w postaci liczby jest minimalne.

Oto przykład. Wynik min(12, 'ABC', 44) będzie ciąg 'ABC'. Dzieje się tak z powodu tego że wartość liczbowa wiersza 'ABC' — to zero, zero — to najmniejsza wartość w tej tablicy. Wynik min — jest to element, którego wartość liczbowa jest minimalny. W tym przykładzie jest to wiersz 'ABC'.

Jeszcze jeden przykład. Wynik min(10, 7, '4H') będzie ciąg '4H'.

Oficjalna dokumentacja

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

  min
        my $num = min @list;

    Similar to "max" but returns the entry in the list with the lowest
    numerical value. If the list is empty then "undef" is returned.

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

Inne artykuły