Я относительно плохо знаком с Perl, и я не хочу использовать Список:: Util max
функционируйте для нахождения максимального значения данного массива.
Когда я тестирую код ниже, он просто возвращает первое значение массива, не максимум.
sub max
{
my @array = shift;
my $cur = $array[0];
foreach $i (@array)
{
if($i > $cur)
{
$cur = $i;
}
else
{
$cur = $cur;
}
}
return $cur;
}
Replace
my @array = shift;
with
my @array = @_;
@_
- массив, содержащий все аргументы функции. shift
захватывает только первый аргумент функции и удаляет его из @_. Измените этот код, и он должен работать правильно!
Почему вы не хотите использовать что-то, что работает?
Один из способов решения подобных проблем - отладка ваших структур данных.На каждом шаге вы распечатываете данные, которые вам нужны, чтобы видеть, действительно ли там то, что вы ожидаете. Это может быть так просто:
print "array is [@array]\n";
Или для сложных структур данных:
use Data::Dumper;
print Dumper( \@array );
В этом случае вы могли бы увидеть, что @array
имеет только один элемент, поэтому он должен быть максимумом.
Если вы хотите увидеть, как работают присваивание списка и аргументы подпрограммы, ознакомьтесь с Learning Perl .
Вы можете написать функцию как:
#!/usr/bin/perl
use strict; use warnings;
print max(@ARGV);
sub max {
my $max = shift;
$max >= $_ or $max = $_ for @_;
return $max;
}
Однако было бы гораздо эффективнее передать ей ссылку на массив и еще эффективнее использовать List :: Util :: max
.