use strict;
use warnings;
$manifest=read_file("release.ms1");
print "$manifest\n";
my @new=split('\.',$manifest);
my %data=@new;
print "$data('vcs version')";
release.ms1的内容
vcs.version:12312321
vcs.path:CiscoMain/IT/GIS/trunk
错误:
vcs.version:12312321
vcs.path:CiscoMain / IT / GIS /中继线
vcsversion:12312321
vcspath:CiscoMain / IT / GIS /中继线
./script.pl第33行的哈希分配中奇数个元素。
在./script.pl第35行打印时使用未初始化的值。
我需要输出:
version=12312321
path=CiscoMain/IT/GIS/trunk
答案 0 :(得分:1)
您的split
功能正在分配:
$new[0] = 'vcs'
$new[1] = 'version:12312321\nvcs'
$new[2] = 'path:CiscoMain/IT/GIS/trunk'
当您为散列分配列表时,它必须具有偶数个元素,因为它们需要是交替的键和值。
看起来你真正想做的就是在换行符和冒号上拆分$manifest
,并用空格替换键中的点。
my @new = split(/[.\n]/, @manifest;
my %data;
for (my $i = 0; $i < @new; $i += 2) {
my $key = $new[$i];
$key =~ s/\./ /g;
$data{$key} = $new[$i+1];
}
最后,您访问哈希元素的语法是错误的。它应该是:
print $data{'vcs version'};
哈希键用大括号括起来,而不是圆括号。