Perl在哈希引用中的反引号给出了不同的结果

fat*_*upu 4 perl backticks

我有一个名为a.gz的文件,它是一个gzip文件,解压缩时包含以下行:

a
b
Run Code Online (Sandbox Code Playgroud)

下面是两个perl代码块,我认为"应该"给出相同的结果,但它们没有.

代码#1:

use Data::Dumper;
my $s = {
        status => 'ok',
        msg    => `zcat a.gz`
};
print Dumper($s),"\n";
Run Code Online (Sandbox Code Playgroud)

代码#2:

use Data::Dumper;
my $content = `zcat a.gz`;
my $s = {
      status => 'ok',
      msg    => $content
};
print Dumper($s), "\n";
Run Code Online (Sandbox Code Playgroud)

代码#1给出以下结果:

Odd number of elements in anonymous hash at ./x.pl line 8.
$VAR1 = {
          'msg' => 'a
',
          'b
' => undef,
          'status' => 'ok'
        };
Run Code Online (Sandbox Code Playgroud)

代码#2返回以下结果:

$VAR1 = {
          'msg' => 'a
b
',
          'status' => 'ok'
        };
Run Code Online (Sandbox Code Playgroud)

我正在使用在Linux上运行的perl 5.10.1

mel*_*ene 6

perldoc perlop:

在标量上下文中,它作为单个(可能是多行)字符串返回,或者undef如果命令失败.在列表上下文中,返回行列表(但是您已使用$/或定义行$INPUT_RECORD_SEPARATOR),或者如果命令失败则返回空列表.

分配标量放在``标量上下文中; 使用它将{ ... }它放在列表上下文中.

{ LIST }获取一个列表并在键和值之间交替解释其内容,即key1, value1, key2, value2, key3, value3, ....如果元素的数量是奇数,则会收到警告(并且缺少值undef).

LIST , LIST (列表上下文中的逗号运算符)连接两个列表.

=>工作就像,,但自动引用左侧的标识符(如果有的话).