только начал программировать на Perl, буквально недели две назад (изучаем по институтской методичке). задали задание: "дан массив имен и рост студентов. необходимо отсортировать и вывести по убыванию (по росту) этот список. я попробовал хэш массивом задать имена и значения роста, потом нашел простенький код сортировки и вставил в программу. но, как я понял, толком ничего не сортируется и вообще я не понимаю, как идет сортировка. просьба помочь кто в этом разбирается... если тут таковые есть.
Код:
#!/usr/bin/perl
my $i; # индекс в массиве
my $stud_name; # фамилия студента
# хеш-массив, в котором записаны сведения о росте студентов
my %rost = (
'Ivanov' => 176,
'Petrov' => 165,
'Sidorov' => 190,
'Razuvaev' => 186,
'Lebedev' => 174,
'Moroz' => 168,
'Vase4kin' => 182,
'Yudin' => 180
);
my @mas = sort by_rost keys %rost;
sub by_rost { $rost{$b} <=> $rost{$a} }
#my @mas = %rost;
#my @mas = sort by_rost values %rost;
#sub by_rost { $rost{$b} <=> $rost{$a} }
print "\nVivod hash-massiva\n";
# получить значения всех элементов хеш-массива можно так:
# ПРИМЕЧАНИЕ. В этом случае функция keys выбирает из
# хеш-массива значения всех ключей (т.е. фамилии
# студентов) и формирует из них массив,
# а конструкция foreach перебирает все элементы
# этого массива, присваивая поочередно их значения
# переменной $stud_name.
foreach $stud_name ( keys %rost )
{
print "Rost studenta $stud_name: $rost{ $stud_name }\n";
}
print "\nVivod hash-massiva s ispolzovaniem peremennoi \$_\n";
# получить значения всех элементов хеш-массива можно так:
# ПРИМЕЧАНИЕ. В этом случае функция keys выбирает
# из хеш-массива значения всех ключей
# (т.е. фамилии студентов) и формирует из них
# массив, а конструкция foreach перебирает все
# элементы этого массива, присваивая поочередно их
# значения "теневой" переменной $_.
foreach ( keys %rost )
{
# для сравнения на точное равенство числовых значений
# используется оператор "==", на неравенство: >, <, >=, <=
if ( $rost{ $_ } == 165 )
{
print "Student $_ imeet nizkui rost: $rost{ $_ }\n";
}
else
{
print "Student $_ imeet visokui rost: $rost{ $_ }\n";
}
}
sleep 20;
exit( 0 );