我有一个数组,我正在尝试打印出来(用于获取SQL数据库信息):
my $variables_array = [[u1, answer1, Uvalue], ["v1", u2, v2, answer2, Vvalue]];
当我打印$variables_array
时,除了v2
之外的所有变量都打印出我上面的格式。我搜索了 google / SO ,但在Perl中找不到v#
的任何特殊意义。我注意到 notepad ++ 改变了数组数组中v#
的颜色,表明它是某种特殊变量,但我不知道它是什么?有人可以为我阐明一下,我很困惑。
答案 0 :(得分:8)
Perl有很多不同的文字
123
,123.0
,1.23e2
,0x7b
"abc"
,'abc'
,q/abc/
,... Foo::Bar->new()
strict 'refs'
,没有表示潜艇的裸字会被视为字符串。=>
的LHS始终是自动引用的-abc eq "-abc"
v1.2.3
V字符串由一系列由句点分隔的数字组成。每个数字都被翻译成相应的字符。由于它们是字符串,因此可以将它们与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
不进行插值,在任何空格处拆分字符串,并且等于字符串列表)
答案 1 :(得分:3)
没有严格或警告,我得到:
$variables_array: [
[
'u1',
'answer1',
'Uvalue'
],
[
'v1',
'u2',
v2,
'answer2',
'Vvalue'
]
]
amon的回答解释说他们是"barewords"。几乎在所有上下文中都不推荐使用Barewords(可能不是命令行脚本)。
请注意,它引用'v1'
但不引用'v2'
,因为版本字符串 - 以v
开头的数字 - 是Perl中的合法文字。