0

Perl について少し知っているだけで、この構文が機能しないことに驚きました。

if (exists $wid = $dict{$w}) {
 print "$wid:$c\n";
}

割り当て$wid = $dict{$w}を行い、同時に存在するかどうかを確認できないようです:

存在する引数は、HASH または ARRAY 要素、または createWordIndex.pl 行 31 のサブルーチンではありません。

この種の割り当てを行う方法はありますか?または、最初に存在を確認してから、条件が真の場合に割り当てを行う必要がありますか?

4

4 に答える 4

4

印刷する前にそこに値があるかどうかを把握しようとしていますか? 次に、次のようにする必要があります。

if ( exists($dict{$w}) ) {
    my $wid = $dict{$w};
    print "$wid: $c\n";
}

保存される値が常に定義されることがわかっている場合は、次のことができます。

if ( defined( my $wid = $dict{$w} ) ) {
    print "$wid: $c\n";
}
于 2012-12-10T15:59:56.580 に答える
1

あるいは (TIMTOWTDI)、スマート マッチ演算子を使用できます (Perl バージョン >= 5.10 の場合):

if($w ~~ (keys %dict))
{
  my $wid = $dict{$w};
  print "$wid: $c\n";
}

または、代わりに:

if(grep{$w eq $_}(keys %dict))
{
  my $wid = $dict{$w};
  print "$wid: $c\n";
}
于 2012-12-10T16:03:39.390 に答える
0

あなたはそれを行うことができますexists. 割り当てが行われた場合 ($dict{$w} があるため)、副作用は true です。

my %dict;

$dict{one} = 1;
$dict{two} = 2;
$dict{three} = 3;

if ($wid = $dict{four}) {
  print "$wid\n";
}
else {
  print "NO!\n";
}
于 2012-12-10T16:04:17.800 に答える
0

あなたはちょうどあなたの質問であなたの質問に答えました。

「それとも、最初に存在を確認してから、条件が true の場合に割り当てを行う必要がありますか?」

コード内のexists関数は、スカラー $wid を受け取ります。そして、存在する関数にはハッシュまたは配列要素が必要であることがエラーに明確に記載されています

存在する引数は、HASH または ARRAY 要素、または createWordIndex.pl 行 31 のサブルーチンではありません。

あ、はい。存在するかどうかを最初に確認する必要があります。

フレンドリーなアドバイス: 質問に対する答えを既に知っている可能性があるため、質問する前に考えられるすべてのこと/解決策を試してください。:)

于 2012-12-10T16:03:10.003 に答える