Сортировка массивов в Perl? - PullRequest
0 голосов
/ 01 марта 2011

Я получаю сообщение об ошибке при попытке сортировки простого массива ... ОШИБКА гласит: "использование неинициализированного значения в числовом сравнении (<=>) в строке file.pl #"

#!/usr/bin/perl
use strict
use wardings
use Data::Dumper
my @array
my $array
$array[1]= 5
$array[2]= 2
$array[3]= 3
$array[4]= 4
$array[5]= 1
sub numerically {$a <=> $b}
my @sortedarray = sort numerically @array;

print "@sortedarray\n";

Я просто пытаюсь отсортировать массив для получения:

 1 2 3 4 5

Я новичок в Perl, так что это может быть просто глупо, но, пожалуйста, помогите мне ... Спасибо

Ответы [ 3 ]

7 голосов
/ 01 марта 2011

Массивы индексируются, начиная с 0. Ошибка возникает при попытке отсортировать массив, когда $array[0] не определено.

Обновление : Также в Perl можно написать:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @array = qw(1 2 3 4 5);
sub numerically {$a <=> $b}
my @sortedarray = sort numerically @array;

print "@sortedarray\n";

Нет смысла объявлять $array - это будет скаляр. Вы работаете только с массивом @array, даже если он вызывается с $. Пожалуйста, прочитайте документацию по Perl.

4 голосов
/ 01 марта 2011

Прежде всего, вам нужна точка с запятой в конце каждого оператора.во-вторых, вы не используете Data :: Dumper, так почему вы включаете его?Вам также не нужно объявлять подпрограмму:

#!/usr/bin/env perl
use strict;
use warnings;

my @sorted = sort {$a <=> $b} qw (4 2 3 1 5);
print "@sorted\n";

И вот она у нас.

3 голосов
/ 01 марта 2011

Вы пропустили несколько точек с запятой.

Это warnings, а не wardings.

Элемент 0 в вашем массиве не определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...