Да, вы можете получить срез (то есть несколько значений) из хеша, как этот:
my @slice = @hash{ @select_keys };
И вы можете получить одно значение из хэша, например:
my $value = $hash{ $key };
Но вы не можете обратиться к хешу с начальным символом '%'. Это бессмысленно, если не считать Perl 6 (где сигилы не будут меняться в зависимости от числа).
Поскольку вам нужен один элемент из хэша, ваше назначение должно быть:
my $newValue = $associationsToChangeDict{ $association->Name() };
В Perl существует три контекста: void , скаляр и список . Символ является скорее индикатором context , чем частью имени переменной. Мы видим контекст void , когда никто не ожидает результата от выражения. Этот контекст возникает только в sub
-s, когда программист просто хочет что-то сделать, и ему все равно, будет ли возвращено значение.
Это оставляет только скаляр и список при разговоре о переменных. Такая работа, как формы единственного и множественного числа в языке. Поскольку Ларри Уолл был под влиянием естественных языков при разработке Perl, эти параллели, ну, в общем, естественны. Но здесь нет «хэш-контекста». Конечно, чтобы немного усложнить ситуацию, что-то, оцениваемое как список при нахождении в скалярном контексте, также имеет контекстное значение, оно просто оценивает величину результирующего списка.
Вы вряд ли сделаете это (но это имеет значение):
my $count = @list[1..4];
Но вы могли бы сделать это:
my $count = ( grep { $_ % 2 == 0 } @list[ @subscripts ] );
Это сделало бы всю оценку контекста списка внутри паренов, чтобы вычислить единственное значение общего количества элементов в списке. (Хотя grep
, вероятно, достаточно умен, чтобы считать успехи, вместо формирования нового списка, поскольку контекст распространяется на в Perl.)