我有一个名为a.gz的文件,它是一个gzip压缩文件,解压后包含以下几行:
a
b
下面是两段perl代码,我认为"应该"给出相同的结果,但他们不会。
代码#1:
use Data::Dumper;
my $s = {
status => 'ok',
msg => `zcat a.gz`
};
print Dumper($s),"\n";
代码#2:
use Data::Dumper;
my $content = `zcat a.gz`;
my $s = {
status => 'ok',
msg => $content
};
print Dumper($s), "\n";
代码#1给出以下结果:
Odd number of elements in anonymous hash at ./x.pl line 8.
$VAR1 = {
'msg' => 'a
',
'b
' => undef,
'status' => 'ok'
};
代码#2返回以下结果:
$VAR1 = {
'msg' => 'a
b
',
'status' => 'ok'
};
我正在使用在Linux上运行的perl 5.10.1
答案 0 :(得分:6)
在标量上下文中,它作为单个(可能是多行)字符串返回,如果命令失败则返回
undef
。在列表上下文中,返回行列表(但是您已定义了$/
或$INPUT_RECORD_SEPARATOR
的行),如果命令失败,则返回空列表。
分配标量将``
置于标量上下文中;在{ ... }
中使用它将它放在列表上下文中。
{ LIST }
获取一个列表,并在键和值之间交替解释其内容,即key1, value1, key2, value2, key3, value3, ...
。如果元素的数量是奇数,则会收到警告(缺失的值为undef
)。
LIST , LIST
(列表上下文中的逗号运算符)连接两个列表。
=>
的工作方式与,
类似,但会自动引用左侧的标识符(如果有的话)。