Почему я не могу установить $LIST_SEPARATOR в Perl?

Я хочу установить 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 ответа

Решение

Perlvar твой друг:

$LIST_SEPARATOR
$"

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

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

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

$" = '|';

если только ты не

use English;

первый.

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

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

use English;

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

use English '-no_match_vars';

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

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

Минусы:

  • Намного больше печатать
  • Имена не более очевидны (т.е. мне все еще нужно искать вещи)

Плюсы:

  • ?

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

{
  local $" = '|'; # Set interpolated list separator to '|'
  # fun stuff here...
}

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

use strict;

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

use diagnostics;
Другие вопросы по тегам