我的项目中有这个:
sub get_src_info($) {
my $package = shift;
my ($key,$value,$tail) =("","","");
my (@APT_INFO,$r);
open APT, "apt-cache showsrc $package|";
while (<APT>){
chomp;
($key,$value,$tail) = split /:/;
if (defined ($key) && defined ($value)) {
$value =~ s/^\s+|\s+$//;
if (defined($tail)) {
$value = "$value:$tail";
}
if ( $key eq "Package" or $key eq "Version" ) {
$r->{$key} = $value;
}
}
if(/^$/) { push @APT_INFO,$r++; }
}
close APT;
return @APT_INFO;
}
我通常use strict
用来检查错误。该代码适用于no strict "refs";
指令,但没有它就无法运行,产生错误:
Can't use string ("163277181") as a HASH ref while "strict refs" in use at a.pl line 61, <APT> line 45.
第 61 行是: $r->{$key} = $value;
我更喜欢修复我的代码,而不是让它静音,但不知道出了什么问题/如何解决这个问题。
另外,将引用推进以指向下一个对象的正确方法是什么?虽然它有效,但我觉得$r++
这里的构造不正确。
提前非常感谢。