2010-10-05 4 views
-5

Это не общий вопрос. Я задал этот вопрос, потому что меня путают с созданием массивов Perl.Как создать массивы и хэши в Perl?

  1. Как создать или определить массив или хэш? Каковы другие способы сделать это?
  2. Как очистить массив или хэш? Каковы другие способы сделать это?
  3. Как создать массив или хэш с пустым элементом?
  4. Каковы способы создания хэша без значений?
+9

Как вам было предложено много раз, вам нужно сесть с документацией и прочитать некоторые вводные книги. [«Изучение Perl»] (http://en.wikipedia.org/wiki/Learning_Perl) превосходно и принесет вам пользу гораздо больше, чем задавать такие открытые вопросы. – Ether

ответ

2

лексические массивы и хэши создаются пустые. Вы можете создать новый лексический массив или хэш с my:

my @array; 
my %hash; 

По большей части, вы должны использовать только лексические массивы и хэши, но вы можете создать пакет массивов и хэшей с our:

our @array; 
our %hash; 

@array и %hash могут иметь или не иметь данных в этом случае (если они были созданы ранее, это не очистит их содержимое).Имена этих переменных лексическую область видимости, но данные пакета с заданной областью, так что если вы скажете:

{ 
    our @a = (1 .. 5); 
} 
{ 
    our @a; 
    print "@a\n"; 
} 

Он по-прежнему печатать "1 2 3 4 5\n".

Существует много способов очистки хэша или массива. Наиболее распространенным является назначение пустой список к нему:

@array =(); 
%hash =(); 

Вы также можете использовать undef очистить хэш или массив:

undef @array; 
undef %hash; 

Вы могли бы также pop, shift или splice элементы прочь массив:

pop @array while @array; 
shift @array while @array; 

splice @array, 0, scalar @array; 

Вы также можете изменить количество элементов и массив, присвоив номер к $#array формы его имени. Если вы присвоите отрицательное значение, массив будет опустошен:

$#array = -1; 
+1

+1: вы очень терпеливый человек ... –

+0

@ морковный топ Какой хороший способ описать мое состояние. –

5

Если у вас возникли проблемы с такими основами, вы должны пойти и посмотреть на perldoc perlsyn. Он охватывает синтаксис языка и должен рассказать вам, что вам нужно.

1

Вы можете создавать массивы и хэши путем присвоения списков (включая пустой список):

my @a1; # empty array 
my @a2 = 'a'; 

mh %h1; # empty hash 
my %h2 = 'a'; # a => undef 
my %h3 = ('a', 'b'); # 'a' => 'b' 
my %h4 = (a => 'b'); # 'a' => 'b' 

Вы можете очистить массив или хэш, явно назначая пустой список:

@a2 =(); 
%h3 =(); 
0

It похоже, что вы могли бы воспользоваться чтением tutorials and beginners guides на Perl. Есть множество примеров того, что вы делаете именно то, что вы просите.

Следует иметь в виду, что хеши и массивы практически идентичны (концептуально), но массивы индексируются целыми числами и хешируются индексами по строкам. Синтаксически вы ссылаетесь на эти индексы по-разному, но концептуально так вы можете думать о них.

+1

Я бы добавил еще одно отличие: массивы упорядочены, а хеши неупорядочены. То есть, если вы выполняете итерацию по заданному массиву, вы всегда будете возвращать элементы в том же порядке, но хэш не гарантирует гарантию порядка значений, возвращаемых ['keys'] (http: // perldoc .perl.org/functions/keys.html), ['values'] (http://perldoc.perl.org/functions/values.html) или [' each'] (http: //perldoc.perl. org/functions/every.html) для хэшей. –

+0

Да, это отличный момент. Есть (конечно) и многие другие различия, но эти два, вероятно, отбирают у кого-то, кто пытается справиться с основными различиями. – CanSpice

0

Создание массива:

my @array = (1, 2, 3, 4); 

Создать хэш:

my %hash = (
    one => 1, 
    two => 2, 
    three => 2, 
    four => 2, 
); 

Очистить массив или хэш:

@array =(); 
%hash =(); 

Создать пустой массив/хэш:

my @array =(); 
my %hash =(); 
Смежные вопросы