在Perl中v1,v2等代表什么?

时间:2013-02-08 14:30:01

标签: perl special-characters

我有一个数组,我正在尝试打印出来(用于获取SQL数据库信息):

my $variables_array = [[u1, answer1, Uvalue], ["v1", u2, v2, answer2, Vvalue]];

当我打印$variables_array时,除了v2之外的所有变量都打印出我上面的格式。我搜索了 google / SO ,但在Perl中找不到v#的任何特殊意义。我注意到 notepad ++ 改变了数组数组中v#的颜色,表明它是某种特殊变量,但我不知道它是什么?有人可以为我阐明一下,我很困惑。

2 个答案:

答案 0 :(得分:8)

Perl有很多不同的文字

  • 123123.01.23e20x7b
  • 等数字
  • 字符串文字"abc"'abc'q/abc/,...
  • 裸字
    • Barewords看起来像没有参数列表的函数调用
    • 在特殊的地方,即使在严格的情况下也是如此:Foo::Bar->new()
    • 没有strict 'refs',没有表示潜艇的裸字会被视为字符串。
    • 胖逗号=>的LHS始终是自动引用的
    • 带有前导减号的Barewords总是字符串,除非它们是文件测试运算符。 -abc eq "-abc"
  • V-strings(V在矢量或版本中)。 v1.2.3

V字符串由一系列由句点分隔的数字组成。每个数字都被翻译成相应的字符。由于它们是字符串,因此可以将它们与ltgt等进行比较。

它们适用于例如IP地址或版本号。它们不适合打印出来,因为低数字表示不可打印的字符。

$ perl -E'say v49.50.51'
123

故事的寓意?始终use strict; use warnings;,也可以查看qw//引号运算符:

my $variables_array = [[qw/u1 answer1 Uvalue/], [qw/v1 u2 v2 answer2 Vvalue/]];
# or verbose:
my $variables_array = [['u1', 'answer1', 'Uvalue'], ['v1', 'u2', 'v2', 'answer2', 'Vvalue']];

qw不进行插值,在任何空格处拆分字符串,并且等于字符串列表)

答案 1 :(得分:3)

没有严格或警告,我得到:

$variables_array: [
                    [
                      'u1',
                      'answer1',
                      'Uvalue'
                    ],
                    [
                      'v1',
                      'u2',
                      v2,
                      'answer2',
                      'Vvalue'
                    ]
                  ]

amon的回答解释说他们是"barewords"。几乎在所有上下文中都不推荐使用Barewords(可能不是命令行脚本)。

请注意,它引用'v1'但不引用'v2',因为版本字符串 - 以v开头的数字 - 是Perl中的合法文字。