Что является $ Perl; переменная для?

Какой-либо 1 имеет какую-либо идею, что $; (сначала разделите аргумент функции) в следующем фрагменте кода:

      local(@a) = ();
      local($i) = 0;
      for ($i = 0; $i < $d; $i++) {
         @a = split($;, @b[$i]);
         $c     = @a[0];
      }

Скаляр не найден никем где в сценарии кроме в для цикла.

Любая справка ценится.

9
задан Greg Bacon 4 February 2010 в 07:29
поделиться

2 ответа

Специальные переменные 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]

. В начале @ они представляют собой одноэлементные срезы массива, а с $ - это простые скаляры.

13
ответ дан 2 November 2019 в 23:07
поделиться

Специальные переменные Perl перечислены в perlvar .

0
ответ дан 2 November 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: