Perl:chomp的奇怪行为

mkc*_*mkc 0 perl

chompPerl中的函数从最后出现的变量中删除记录分隔符.但是,在下面的代码中,它删除了更多 - 它也从变量的前面删除了一些字符.这是代码:

#!/usr/bin/env perl

use strict;
use warnings;
use String::Util qw(trim);
use feature 'say';

{
open FILE, "conf.txt" or die "Can't open file";
local $/ = ';';
my %hash;
my @val;

while (<FILE>){
    next if (/^\s+$/);
    @val=split /=/;
    $hash{$val[0]}=$val[1];
}

say $hash{"name1"};
say chomp $hash{"name1"};
close FILE;
}
Run Code Online (Sandbox Code Playgroud)

conf.txt文件看起来像这样:

name1=va
l1;
name2=v
a
l2;
name3=val3;
name4=val4;
Run Code Online (Sandbox Code Playgroud)

代码的输出如下:

~ $ ./readconf.pl 
va
l1;
1
Run Code Online (Sandbox Code Playgroud)

我原以为输出say chomp $hash{"name1"};会是va\nl1.为什么只输出1

Gil*_*il' 6

手册:

它返回从其所有参数中删除的字符总数.

chomp修改其论点.它不会返回可能被截断的字符串.