为什么我不能在Perl中设置$ LIST_SEPARATOR?

Aar*_*ron 3 perl list-separator

我想在perl中设置LIST_SEPARATOR,但我得到的就是这个警告:

Name "main::LIST_SEPARATOR" used only once: possible typo at ldapflip.pl line 7.
Run Code Online (Sandbox Code Playgroud)

这是我的计划:

#!/usr/bin/perl -w

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

$LIST_SEPARATOR='|';

print "@vals\n";
Run Code Online (Sandbox Code Playgroud)

我确信我错过了一些明显的东西,但我没有看到它.

谢谢

eph*_*ent 12

只有助记符可用

$" = '|';
Run Code Online (Sandbox Code Playgroud)

除非你

use English;
Run Code Online (Sandbox Code Playgroud)

第一.

perlvar中所述.请阅读文档.

以下名称对Perl具有特殊含义.大多数标点符号都有合理的助记符或shell中的类比.不过,如果你想使用长变量名,你只需要说

use English;
Run Code Online (Sandbox Code Playgroud)

在你的程序的顶部.这会将所有短名称别名化为当前包中的长名称.有些人甚至有中等名字,通常是从awk借来的.一般来说,最好使用

use English '-no_match_vars';
Run Code Online (Sandbox Code Playgroud)

如果您不需要$ PREMATCH,$ MATCH或$ POSTMATCH,则调用,因为它可以避免使用正则表达式导致某些性能损失.见英文.


Chr*_*utz 9

perlvar是你的朋友:

$LIST_SEPARATOR
$"

这类似于$,它应用于插入到双引号字符串(或类似的解释字符串)中的数组和切片值.默认是一个空格.(助记符:很明显,我想.)

$LIST_SEPARATOR只有您可以使用use English;如果您不想use English;在所有程序中使用,请$"改用.相同的变量,只是更简洁的名称.

  • 他们将在您使用英语模块后立即工作. (2认同)

Tel*_*hus 7

稍微偏离主题(问题已经得到很好的回答),但我没有得到吸引力English.

缺点:

  • 更多打字
  • 名字不是更明显(即,我仍然需要查看)

优点:

我可以看到其他读者的好处- 特别是那些根本不了解Perl的人.但是,在这种情况下,如果它使代码的问题更具可读性后来,我宁愿这样的:

{
  local $" = '|'; # Set interpolated list separator to '|'
  # fun stuff here...
}
Run Code Online (Sandbox Code Playgroud)