Почему я не могу установить $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;