3
我在散列時遇到了一些麻煩。我需要獲得key =>值對的版本列表到哈希中,但不斷收到錯誤。下面的代碼是我最近的嘗試。一些字符串已被更改,不需要的代碼不包括在內。Perl散列中元素的奇數
我已經看遍了所有的網絡,但一直沒能找到任何可以幫助我的東西。我用了很長時間的Perl,但沒有使用哈希和數組。我的大部分Perl經驗都與正則表達式和shell執行有關。如果我使用的是PHP,那麼我只是使用多維數組,但這是Perl,並且我正在編寫的腳本比所示的腳本還多,或者我會切換到PHP。
我很欣賞無論誰花時間幫忙。謝謝!
sub sub1 {
# Read file which populates @rows with each line.
my %data;
for (my $i=2; $i <= scalar @rows - 1; $i++) {
$ver =~ s/\s//m;
$data{ $ver } = [
'version', $ver,
'available', $table_tree->cell($jt,1)->as_text,
'bsupport', $table_tree->cell($jt,2)->as_text,
'ssupport', $table_tree->cell($jt,3)->as_text,
'eol', $table_tree->cell($jt,3)->as_text,
'utype', $table_tree->cell($jt,5)->as_text,
'lreleases', $table_tree->cell($jt,7)->as_text
];
};
return %data;
}
sub check_ {
# line 199 follows
my (%hash) = @_;
print Dumper (\%hash)."\n";
}
my %data = sub1($file);
check_(%data);
警告:
Odd number of elements in hash assignment at ./file.pl line 199 (#1)
(W misc) You specified an odd number of elements to initialize a hash,
which is odd, because hashes come in key/value pairs.
的哈希%傾倒時是:
$VAR1 = {
'string1' => [
'version',
'string1',
'available',
'stringa',
'bsupport',
'stringb',
'ssupport',
'stringc',
'eol',
'stringd',
'utype',
'stringe',
'lreleases',
'stringf'
],
'string2' => [
'version',
'string2',
'available',
'stringa',
'bsupport',
'stringb',
'ssupport',
'stringc',
'eol',
'stringd',
'utype',
'stringe',
'lreleases',
'stringf'
],
'string3' => [
'version',
'string3',
'available',
'stringa',
'bsupport',
'stringb',
'ssupport',
'stringc',
'eol',
'stringd',
'utype',
'stringe',
'lreleases',
'stringf'
],
# ...
}
我本來試圖讓我一直如下。其中$ VAR1 = {'stringN'=> {...}將是具有任意數量的key =>值對的任何數字,但也會得到相同的錯誤。我有它的工作,但它總是會產生錯誤。
$VAR1 = {
'string1' => {
'version' => 'string1',
'available' => 'stringa',
'bsupport' => 'stringb',
'ssupport' => 'stringc',
'eol' => 'stringd',
'utype' => 'stringe',
'lreleases' => 'stringf'
},
'string2' => {
'version' => 'string2',
'available' => 'stringa',
'bsupport' => 'stringb',
'ssupport' => 'stringc',
'eol' => 'stringd',
'utype' => 'stringe',
'lreleases' => 'stringf'
},
'string3' => {
'version' => 'string3',
'available' => 'stringa',
'bsupport' => 'stringb',
'ssupport' => 'stringc',
'eol' => 'stringd',
'utype' => 'stringe',
'lreleases' => 'stringf'
}
# ...
}
無關,但在'更加習慣'的標題下:'爲我$(2 .. $#行){' –
我選擇了這個答案,因爲這是創建哈希的正確方法。我的警告消息實際上來自一個空數組,該數組是通過添加一個斷點並使用perl -d script.pl找到的。 –