1

参照が潜水艦のハッシュでどのように機能するかを理解するのに苦労しています。

このコードでは、サブルーチン%config内で変更を試みます。handleOptions()

sub handleOption;

my %config = (  gpg => "",
                output => "",
                pass => "",
                host => "",
                type => "");

handleOptions(\%config);
print "\n";
print Dumper \%config;

sub handleOptions
{
    my ($gpgpath,$type,$pass,$host);
    my $pConfig=@_;

    GetOptions ("gpg=s" => \$gpgpath,
                "type=s" => \$type,
                "host=s" => \$type,
                "pass=s"=>\$pass);
    $pConfig->{'gpg'} = $gpgpath;
    $pConfig->{'type'} = $type;
    $pConfig->{'pass'} = $pass;
    $pConfig->{'host'} = $host;
    print Dumper %$pConfig;
}

--gpg='/home/daryl/gpg/pass.gpgcliのオプションを指定したときの出力は次のとおりです。

$VAR1 = 'pass';
$VAR2 = undef;
$VAR3 = 'gpg';
$VAR4 = '/home/daryl/gpg/pass.gpg';
$VAR5 = 'type';
$VAR6 = undef;
$VAR7 = 'host';
$VAR8 = undef;

$VAR1 = {
          'pass' => '',
          'gpg' => '',
          'type' => '',
          'output' => '',
          'host' => ''
        };

どのように進めればよいですか?

4

1 に答える 1

4

とにするuse strictuse warnings、ハッシュ参照としてスカラーを使用することに関するエラーメッセージが表示されます。それは問題がこの行にあることをあなたに教えてくれるでしょう:

my $pConfig=@_;

@_配列のスカラーコンテキストを変数に割り当てています$pConfig。これが意味するのは$pConfig、配列内の要素の数を格納しているということです@_

代わりに、次のことができます。

my ($pConfig) = @_;KerrekSBが示唆するように、または:

my $pConfig = shift;(これshift@_自動的に行われます)

perldoc perldataスカラーコンテキストでの非スカラーの呼び出しの詳細については、を参照してください。また、ワンライナーや短い使い捨てスクリプトを書いているのでない限り、必ずとを忘れないでuse strictくださいuse warnings

于 2013-01-17T16:16:10.310 に答える