Специальные переменные Perl документированы в perlvar
, включая $;
$ SUBSEP
$;
Индексный разделитель для эмуляции многомерного массива. Если вы ссылаетесь на хеш-элемент как
$foo{$a,$b,$c}
это действительно означает
$foo{join($;, $a, $b, $c)}
Но не ставьте
@foo{$a,$b,$c} # a slice--note the @
что означает
($foo{$a},$foo{$b},$foo{$c})
По умолчанию "\034"
, так же, как SUBSEP
в awk. Если ваши ключи содержат двоичные данные, безопасное значение для $;
может отсутствовать. (Мнемоника: запятая (синтаксический разделитель нижних индексов) - это точка с запятой. Да, я знаю, это довольно неубедительно, но $,
уже используется для чего-то более важного.)
Рассмотрите возможность использования "настоящих" многомерных массивов, как описано в perllol .
Мы могли бы догадаться о том, почему он используется ( например, , возможно @b
содержит некоторые ключи хеша), но знание того, как создается @b
, позволило бы нам дать более полезные ответы.
Обратите внимание, что @b[$i]
и @a[0]
, вероятно, должны быть
$b[$i]
и
$a[0]
вместо этого. С ведущими @
они представляют собой одноэлементные срезы массивов, но с $
они являются простыми скалярами.