3

我想在 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

4 回答 4

12

只有助记符可用

$" = '|';

除非你

use English;

第一的。

perlvar中所述。请阅读文档。

以下名称对 Perl 具有特殊意义。大多数标点名称都有合理的助记符,或在外壳中的类似物。然而,如果你想使用长变量名,你只需要说

use English;

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

use English '-no_match_vars';

如果您不需要 $PREMATCH、$MATCH 或 $POSTMATCH,则调用它,因为它避免了使用正则表达式对性能的影响。见英文

于 2009-04-02T19:30:47.650 回答
9

perlvar是你的朋友:

$LIST_SEPARATOR
$"

这就像$,它适用于插入双引号字符串(或类似的解释字符串)的数组和切片值。默认为空格。(助记符:很明显,我想。)

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

于 2009-04-02T19:31:06.697 回答
7

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

缺点:

  • 更多的打字
  • 名称不明显(即,我仍然需要查找内容)

优点:

  • ?

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

{
  local $" = '|'; # Set interpolated list separator to '|'
  # fun stuff here...
}
于 2009-04-02T22:18:50.100 回答
2

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

use strict;

您可能希望使用 diagnostics pragma 来获得有关警告的额外命中(您已经使用 -w 标志启用):

use diagnostics;
于 2009-04-02T21:23:50.793 回答