#perl
#perl
Вопрос:
Я работаю над домашним заданием, которое дает мне задание взять четыре введенных пользователем числа и сравнить их, чтобы вывести наибольшее и наименьшее. Я не могу использовать циклы, поэтому я использую операторы if / else / elsif, но я продолжаю получать ошибку. Я получил это до сих пор, и я не уверен, что я делаю неправильно.
[Shebang]
my $small;
my $big;
print "nEnter first number: ";
chomp (my $one = <>);
print "nEnter second number: ";
chomp (my $two = <>);
print "nEnter third number: ";
chomp (my $three = <>);
print "nEnter fourth number: ";
chomp (my $four = <>);
if ($one >= $two) {
$one = $big;
$two = $small;
}
else {
$one = $small;
$two = $big;
}
if ($three >= $big) {
$three = $big;
}
elsif ($three <= $small) {
$three = $small;
}
if ($four >= $big) {
$four = $big;
}
elsif ($four <= $small) {
$four = $small;
}
print "LRG: $bign";
print "SML: $smalln";
В идеале, вы вводите четыре числа, и выводится наибольшее и наименьшее. Вместо этого я получаю
«Использование неинициализированного значения $big в числовом формате ge (>=) в [filename].pl строка 29, <> строка 4.» в строке 29 и 36.
Я также получаю
«Использование инициализированного значения $small в конкатенации (.) или строка строка 44, <> строка 4».
Комментарии:
1. Все ваши назначения выполняются в обратном порядке. например, вы говорите,
$one = $big
что вы имеете в виду$big = $one
2. Это сработало! Спасибо! Думаю, я не знал, что это должен быть конкретный способ определения переменных, подобных этому.
Ответ №1:
Perl работает так же, как практически любой другой язык программирования. В операторе присваивания значение в правой части оператора присваивается переменной в левой части оператора. Итак, в таком операторе, как:
$one = $big;
Вы присваиваете значение $big
переменной $one
. Как уже указывалось в комментарии, это неправильный способ, и вы действительно хотели:
$big = $one;
Есть пара более простых подходов, которые вы можете использовать. Во-первых, вы могли бы отсортировать список чисел, а затем взять первый и последний элементы из списка:
my @sorted = sort { $a <=> $b } ($one, $two, $three, $four);
my ($small, $big) = @sorted[0, $#sorted];
Или вы можете использовать функции min()
и max()
из списка модулей::Util.
use List::Util qw[min max];
my $small = min($one, $two, $three, $four);
my $big = max($one, $two, $three, $four);
Комментарии:
1. List::MoreUtils
minmax
работает быстрее, если вам нужны как минимальные, так и максимальные значения2. @ikegami: Да, но я предпочитаю использовать базовые модули при написании ответов для очевидных новичков.