Какой-либо 1 имеет какую-либо идею, что $;
(сначала разделите аргумент функции) в следующем фрагменте кода:
local(@a) = ();
local($i) = 0;
for ($i = 0; $i < $d; $i++) {
@a = split($;, @b[$i]);
$c = @a[0];
}
Скаляр не найден никем где в сценарии кроме в для цикла.
Любая справка ценится.
Специальные переменные Perl описаны в perlvar
, включая $;
$ SUBSEP
$;
Разделитель нижнего индекса для эмуляции многомерного массива. Если вы ссылаетесь на хеш-элемент как
$ foo {$ a, $ b, $ c}
, это на самом деле означает
$ foo {join ($ ;, $ a, $ b , $ c)}
Но не помещайте
@foo {$ a, $ b, $ c} # отрезок - обратите внимание на @
, означает
($ foo {$ a}, $ foo {$ b}, $ foo {$ c})
По умолчанию
«\ 034»
, то же, чтоПОДПОДПИСЬ
в awk. Если ваши ключи содержат двоичные данные, возможно, нет безопасного значения для$;
. (Мнемоника: запятая (синтаксический разделитель нижнего индекса) представляет собой точку с запятой. Да, я знаю, это довольно неубедительно, но$,
уже используется для чего-то более важного.)Рассмотрите возможность использования «реальный» "многомерные массивы, как описано в perllol .
Мы могли догадаться, почему он используется ( например, , возможно, @b
содержит некоторые ключи хэша), но знание того, как создается @b
, позволит мы предоставим более полезные ответы.
Обратите внимание, что @b [$ i]
и @a [0]
, вероятно, должны быть вместо
$b[$i]
и
$a[0]
. В начале @
они представляют собой одноэлементные срезы массива, а с $
- это простые скаляры.