軽くベンチしてみた。やはりList::Util速いわ。
use Benchmark;
use List::Util qw(max);
my @list;
foreach (1..$ARGV[0]) {push @list, rand}

timethese(-1, {
    sort => sub {
      my @sorted = sort {$a <=> $b} @list;
      return $sorted[-1];
    },
    sort2 => sub {
      return (sort {$a <=> $b} @list)[-1];
    },
    foreach => sub {
      my $max = $list[0];
      foreach (@list) { $max = $_ if $_ > $max; }
      return $max;
    },
    map => sub {
      my $max = $list[0];
      map { $max = $_ if $_ > $max } @list;
      return $max;
    },
    max => sub {
      return max(@list);
    },
  });