【发布时间】:2013-12-30 20:45:50
【问题描述】:
在将我的脚本从 Windows 机器移动到 Unix 系统后,我遇到了一个非常奇怪的问题。 我已经编写了 READIN 子程序,并在 Windows 上使用 Perl 5.16.3 成功对其进行了测试,但它在使用 Perl 5.14.2 的 Unix 下无法运行
sub READIN
{
my (%tmp, $val, $key);
open (DAT, "$_[0]")or die "Thou shalt not open this file, so I generated an error: $! \n";
while (<DAT>)
{
chomp;
($val, $key) = split (/;/);
#print "Value -> $val - Key_for_Hash -> $key\n"; *#DBG - Works!*
$tmp{$key} = exists $tmp{$key}? "$val" : $val;
#print "ValueH -> $tmp{$key} - Key_for_HashH -> $key\n"; *#DBG - Works!*
#print "KeyH-> $key - ValueH -> $tmp{$key}\n"; *#DBG - doesn't work, cuts of everything before " - ValueH....."*
#print "Value2 -> $val - Key_for_Hash2 -> $key\n\n";*#DBG - Works!*
}
close DAT or die "Filehandle is grumpy today and dislikes your Idea to be closed as of $\n";
return %tmp;
}
我使用 Data::Dumper 得到的输出是这样的:
$VAR1 = {
' => '18.15.7.1.39.',
' => '19.15.7.1.39.',
' => '19.15.9.1.6.1.',
' => '19.15.7.1.6.',
' => '19.15.1.',
' => '18.15.1.',
' => '18.15.7.1.36.',
' => '18.15.7.1.34.',
' => '18.15.7.1.1.',
' => '18.15.7.1.33.',
' => '18.1.9.0',
' => '19.15.7.1.36.',
' => '16.15.2.1.4.1',
' => '18.15.7.1.38.',
' => '19.15.9.1.13.',
' => '18.15.9.1.6.1.',
' => '16.1.9.0',
' => '19.15.7.1.33.',
' => '19.15.7.1.37.',
' => '19.1.9.0',
' => '19.15.9.1.3.',e
' => '19.15.7.1.4.',
' => '19.15.7.1.38.',
' => '19.15.7.1.34.',
'radioid2e' => '19.15.7.1.1.',
' => '16.15.2.1.4.1',
' => '19.15.7.1.35.',
' => '18.15.7.1.35.'
};
最后,这是我从文件中读取的数据:
16.1.9.0;摆脱
16.15.2.1.4.1;卡普
16.15.2.1.4.1;模组
18.1.9.0;rid2
18.15.7.1.35.;tdmkapt2
18.15.7.1.38.;tdmkapr2
18.15.7.1.34.;modt2
18.15.7.1.33.;modr2
18.15.9.1.6.1.;tdmkap2
18.15.7.1.36.;etht2
18.15.7.1.39.;ethr2
18.15.1.;rt2
18.15.7.1.1.;radioid2
19.1.9.0;rid2e
19.15.7.1.35.;tdmkapt2e
19.15.7.1.38.;tdmkapr2e
19.15.7.1.34.;modt2e
19.15.7.1.33.;modr2e
19.15.9.1.6.1.;tdmkap2e
19.15.7.1.36.;etht2e
19.15.7.1.39.;ethr2e
19.15.1.;rt2e
19.15.7.1.4.;um2e
19.15.7.1.37.;lm2e
19.15.9.1.3.;glokapam2e
19.15.9.1.13.;ethkapam2e
19.15.7.1.6.;acmcpm
19.15.7.1.1.;radioid2e
有人能指出我做错了什么吗?还是 5.14.6 上的普遍问题?
//编辑:
这是我将在 Windows (Perl 5.16.3) 中得到的 Data::Dumper 输出:
$VAR1 = {
'rid2e' => '19.1.9.0',
'rt2' => '18.15.1.',
'ethkapam2e' => '19.15.9.1.13.',
'etht2' => '18.15.7.1.36.',
'etht2e' => '19.15.7.1.36.',
'tdmkapt2e' => '19.15.7.1.35.',
'tdmkapr2' => '18.15.7.1.38.',
'tdmkapt2' => '18.15.7.1.35.',
'ethr2' => '18.15.7.1.39.',
'ethr2e' => '19.15.7.1.39.',
'tdmkap2e' => '19.15.9.1.6.1.',
'acmcpm' => '19.15.7.1.6.',
'rt2e' => '19.15.1.',
'modt2e' => '19.15.7.1.34.',
'modr2e' => '19.15.7.1.33.',
'um2e' => '19.15.7.1.4.',
'radioid2' => '18.15.7.1.1.',
'tdmkap2' => '18.15.9.1.6.1.',
'rid' => '16.1.9.0',
'modr2' => '18.15.7.1.33.',
'glokapam2e' => '19.15.9.1.3.',
'rid2' => '18.1.9.0',
'kap' => '16.15.2.1.4.1',
'tdmkapr2e' => '19.15.7.1.38.',
'radioid2e' => '19.15.7.1.1.',
'modt2' => '18.15.7.1.34.',
'mod' => '16.15.2.1.4.1',
'lm2e' => '19.15.7.1.37.'
};
【问题讨论】:
-
您所期望的输出应该是什么样子并不明显,您能更好地解释一下吗?
-
我希望对应值的键也应该在输出中,就像这一行
'radioid2e' => '19.15.7.1.1.',一样,当然只有不同的数据