Почему я не могу установить $ LIST_SEPARATOR в Perl? - PullRequest
3 голосов
/ 02 апреля 2009

Я хочу установить LIST_SEPARATOR в perl, но все, что я получаю, это предупреждение:

Name "main::LIST_SEPARATOR" used only once: possible typo at ldapflip.pl line 7.

Вот моя программа:

#!/usr/bin/perl -w

@vals;
push @vals, "a";
push @vals, "b";

$LIST_SEPARATOR='|';

print "@vals\n";

Я уверен, что упускаю что-то очевидное, но я этого не вижу.

Спасибо

Ответы [ 4 ]

12 голосов
/ 02 апреля 2009

Доступна только мнемоника

$" = '|';

если вы не

use English;

первый.

Как описано в perlvar . Прочитайте документы, пожалуйста.

Следующие имена имеют особое значение для Perl. У большинства имен пунктуации есть разумные мнемоники или аналоги в оболочках. Тем не менее, если вы хотите использовать длинные имена переменных, вам нужно только сказать

use English;

вверху вашей программы. Это связывает все короткие имена с длинными именами в текущем пакете. У некоторых даже есть средние имена, обычно заимствованные из awk. В общем, лучше использовать

use English '-no_match_vars';

вызов, если вам не нужны $ PREMATCH, $ MATCH или $ POSTMATCH, поскольку это позволяет избежать определенного снижения производительности при использовании регулярных выражений. См. Английский .

9 голосов
/ 02 апреля 2009

perlvar ваш друг:

$LIST_SEPARATOR
$"

Это похоже на $, за исключением того, что оно применяется к значениям массива и среза, интерполированным в строку в двойных кавычках (или аналогичную интерпретируемую строку). По умолчанию это пробел. (Мнемоника: очевидно, я думаю.)

$LIST_SEPARATOR доступен только если вы use English; Если вы не хотите use English; во всех своих программах, используйте $" вместо этого. Та же самая переменная, только с более кратким именем.

7 голосов
/ 03 апреля 2009

Немного не по теме (на вопрос уже есть хороший ответ), но я не чувствую привлекательности English.

Минусы:

  • Гораздо больше печатая
  • Имена не более очевидны (т. Е. Я все еще должен искать вещи)

Плюсы:

Я вижу выгоду для других читателей - особенно людей, которые вообще не очень хорошо знают Perl. Но в этом случае, если речь идет о том, чтобы сделать код более читабельным позже , я бы предпочел следующее:

{
  local $" = '|'; # Set interpolated list separator to '|'
  # fun stuff here...
}
2 голосов
/ 03 апреля 2009

Вы ДОЛЖНЫ использовать строгую прагму:

use strict;

Вы можете использовать прагму диагностики для получения дополнительных обращений к предупреждениям (которые вы уже включили с флагом -w):

use diagnostics;
...