У меня возникли проблемы с подпрограммами, а именно с функцией sort , используемой для сортировки массива чисел. Я знаю, что если вы используете только функцию сортировки, она сортируется с использованием формата ASCII, поскольку книга описывает это и то, что сортирует не в нужном порядке. Я знаю и понимаю, что возвращается, используя <=>
для сравнения значений, даже будучи введенным в cmp
для строк (хотя я еще не использовал его).
Что я не понимаю конкретно, так это то, как они сортируют их численно - этот фактический процесс. Я понимаю, что возвращается, но книга просто говорит, что возвращает -1, 0 и 1, а не то, как конкретно числа в конечном итоге сортируются в 1 8 24 72 144 288
.
Мой пример:
sub sort_by_number {
return $a <=> $b;
}
@myArray = (1,24,8,144,72,288);
foreach(sort sort_by_number(@myArray)) {
print("$_ ");
}
Пример, который я полностью понимаю. Это имеет смысл, но я думаю, что это в основном из-за кодировки:
#!/usr/bin/perl
print("Please enter your name: ");
$name = <STDIN>;
chomp($name);
print("Please enter your age: ");
$age = <STDIN>;
chomp($age);
print(greeting($name, $age));
sub greeting {
$msg = "Hello $_[0], ";
determine_age($_[1],$msg);
}
sub determine_age {
$num = ($_[0] <=> 18);
if ($num == -1) {
return "$_[1]you are under 18.($_[0])\n";
} elsif ($num == 0) {
return "$_[1]you will be a 19 on your next birthday!\n";
} else {
return "$_[1]you are over 18!($_[0])\n";
}
}
Огромная благодарность, если кто-то может прояснить.