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

时间:2009-04-02 19:27:10

标签: perl list-separator

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

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 个答案:

答案 0 :(得分:12)

只有助记符可用

$" = '|';

除非你

use English;

第一

perlvar所述。请阅读文档。

  

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

use English;
     

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

use English '-no_match_vars';
     如果你不需要$ PREMATCH,$ MATCH或$ POSTMATCH,那么

调用,因为它避免了使用正则表达式造成的某种性能损失。请参阅English

答案 1 :(得分:9)

perlvar是你的朋友:

  

$LIST_SEPARATOR
  $"

     

这与$,类似,不同之处在于它适用于插入到双引号字符串(或类似的解释字符串)中的数组和切片值。默认是一个空格。 (助记符:很明显,我认为。)

$LIST_SEPARATOR仅在use English; use English;时才可用。如果您不想在所有程序中使用$",请改用{{1}}。相同的变量,只是一个更简洁的名称。

答案 2 :(得分:7)

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

缺点:

  • 更多打字
  • 名字不是更明显(即,我仍然必须查找)

优点:

我可以看到其他读者的好处 - 特别是那些根本不了解Perl的人。但在这种情况下,如果这是一个让代码更易于阅读以后的问题,我宁愿这样做:

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

答案 3 :(得分:2)

你应该使用严格的编译指示:

use strict;

您可能希望使用诊断编译指示获取有关警告的更多命中(已使用-w标志启用):

use diagnostics;