1

我有一组要打印的数组(用于获取 SQL 数据库信息):

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

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

4

2 回答 2

8

Perl 有很多不同的文字

  • 123, 123.0, 1.23e2,这样的数字0x7b
  • 字符串文字"abc", 'abc', q/abc/, ...</li>
  • 空话
    • Barewords 看起来像没有参数列表的函数调用
    • 在特殊的地方,即使在严格的情况下也是可以的:Foo::Bar->new()
    • 没有strict 'refs',不表示 subs 的裸词被视为字符串。
    • 胖逗号的 LHS=>总是自动引用
    • 带有前导减号的裸词始终是字符串,除非它们是文件测试运算符。-abc eq "-abc"
  • V-strings(V 在向量或版本中)。v1.2.3

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

它们适用于例如 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不插值,在任何空格处拆分字符串,并且等于字符串列表)

于 2013-02-08T14:52:24.600 回答
3

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

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

阿蒙的回答解释说它们是“裸词”。Barewords 在几乎所有上下文中都被弃用(但也许不是命令行脚本)。

请注意,它引用'v1'而不是'v2',因为版本字符串——一个以 a 开头的数字——v在 Perl 中是合法的文字。

于 2013-02-08T14:59:31.243 回答