Что это значит в perl $ variable_one {$ variable_two} и как это называется? - PullRequest
3 голосов
/ 14 ноября 2011

Я видел это в куске кода:

if (some_condition) {  
 $index++;  
}  
$index{$some_variable} = $index{$some_variable} + 1; 

Что означает $index{$some_variable}?И почему это используется?

Спасибо.

РЕДАКТИРОВАТЬ: индекс определяется как $index=0;

Ответы [ 5 ]

10 голосов
/ 14 ноября 2011

Если этот код написан правильно, у вас будут следующие строки:

use strict;
use warnings;
my $index;
my %index;

if (some_condition) {  
    $index++;  
}  
$index{$some_variable} = $index{$some_variable} + 1; 

$index{$some_variable} относится к хешу, а $index к скаляру. В perl это совершенно верно, и %index и $index будут считаться двумя разными переменными.

Это также причина, почему так важно использовать строгий. Зачем использовать строгие и предупреждения?

9 голосов
/ 14 ноября 2011

Извлекает запись из хеша %index, используя ключ, значение которого равно $some_variable

(Примечание. Может также существовать скаляр с именем $index, но он будет занимать отдельное пространство имен. То есть вы можете иметь как хеш, так и скаляр с именем index, и они не будут конфликтовать.)

6 голосов
/ 14 ноября 2011

Perl имеет несколько пространств имен

  • $var - скалярная переменная
  • @var является переменной массива, а $var[$i] является элементом этого массива.
  • %var - хеш-переменная, а $var{$i} - элемент этого хеш-кода.
5 голосов
/ 14 ноября 2011

$index в операторе $index++; является скаляром.Он не имеет ничего общего с последующим оператором $index{$some_variable}.

$index{$some_variable} является частью хэша, %index.Хэши (или ассоциативные массивы) состоят из одной или нескольких пар, каждая пара состоит из ключа и значения.Клавиша используется для доступа к значению.perldoc perlintro для легкого знакомства с типами переменных в Perl и perldoc perldsc для более сложных структур данных.

2 голосов
/ 14 ноября 2011

Вам может пригодиться perldata .

...