-2

私のプロジェクトにはこれがあります:

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++それは機能しますが、ここで正しい構造であるとは思えません。

事前にどうもありがとう。

4

1 に答える 1