0

このメソッドのコンパイルに問題があります。

#changes the names of the associations for $agentConf
#where the key value pairs in %associationsToChangeDict are the old and new values respectively
sub UpdateConfObjectAssociations{
    my($agentConf, %associationsToChangeDict) = @_;

    foreach my $association ($agentConf->GetAssociations()) {
        if ( grep {$_ eq $association->Name()} keys %associationsToChangeDict) {
            my $newValue = %associationsToChangeDict{$association->Name()};
            $association->Value($newValue);
        } 
    }   
}

これはエラーメッセージです:

syntax error at D:\Install\AutoDeployScripts\scripts\Perl/.\AI\SiteMinderHelper
.pm line 75, near "%associationsToChangeDict{"
syntax error at D:\Install\AutoDeployScripts\scripts\Perl/.\AI\SiteMinderHelper
.pm line 79, near "}"

誰でも問題がどこにあるかを見ることができますか?

4

1 に答える 1

7

はい、次のようにハッシュからスライス (複数の値) を取得できます。

my @slice = @hash{ @select_keys };

そして、次のようにハッシュから単一の値を取得できます。

my $value = $hash{ $key };

しかし、「%」シジルで始まるハッシュを指定することはできません。これは、Perl 6 (数字によってシジルが変化しない) 以外では意味がありません。

ハッシュから単一のアイテムが必要なため、割り当ては次のようにする必要があります。

my $newValue = $associationsToChangeDict{ $association->Name() };

Perl にはvoidscalar、およびlistの 3 つのコンテキストがあります。シジルは、変数名の一部というよりも、コンテキストの指標です。誰も式から返される結果を期待していない場合、無効なコンテキストが表示されます。このコンテキストはsub、プログラマーが何かを実行したいだけで、値が返されるかどうかを気にしない場合に、-s でのみ発生します。

変数について話すとき、それはスカラーリストだけを残します。この種の作業は、言語の単数形と複数形のように機能します。Larry Wall が Perl を設計する際に自然言語の影響を受けたため、これらの類似点は当然のことです。しかし、「ハッシュコンテキスト」はありません。もちろん、問題を少し複雑にするために、スカラー コンテキストにラップされたときにリストとして評価されるものには、コンテキスト上の意味もあり、結果のリストの大きさに評価されるだけです。

おそらくこれを行うことはありません(ただし、意味があります):

my $count = @list[1..4];

しかし、これを行うことができます:

my $count = ( grep { $_ % 2 == 0 } @list[ @subscripts ] );

リスト内のアイテムの合計の単一の値に評価するために、括弧内ですべてのリストコンテキスト評価を行います。(ただし、Perl ではコンテキスト伝搬されるgrepため、新しいリストを作成する代わりに、おそらく成功をカウントするのに十分なほどインテリジェントです。)

于 2010-11-03T02:46:26.070 に答える