2017-11-20 34 views
0

私はこれが重複しているとは思わない、私は同じタイトルの他のすべての科目を探していたからです。スカラーがオペレータの期待通りに見つかりました

while ($n>0) 
{ 
    if (($n%10)%2 eq 0) 
    $k = $k+1; 
    $n = $n/10; 
} 

は、私は数N にあり、私は私のプログラムを実行しようとすると、このエラーが示されているどのように多くの偶数計算うプログラムを作った::だから、ここに私のコードです

Scalar found where operator expected at script.pl line 7, near ") 
     $k" 
     (Missing operator before $k?) 
syntax error at script.pl line 7, near ") 
     $k " 

7行目は、次のようになります。

$k = $k+1; 
+1

の整数であることを$nを強制すべきだと思うunrelat edであるが、 'eq'は文字列以外の値を比較するために' == 'でなければならない –

答えて

3

perldoc perlsynを参照してください:

if (EXPR) BLOCK 
if (EXPR) BLOCK else BLOCK 
if (EXPR) BLOCK elsif (EXPR) BLOCK ... 
if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK 

... if文はブロック、ない表現が続く必要があります。

if (($n%10)%2 eq 0) { 
    $k = $k+1; 
} 
$n = $n/10; 

また、文の修飾子としてifを使用することができます。

$k = $k+1 if ($n%10)%2 eq 0; 
$n = $n/10; 

...しかしthis usage is discouraged:あなたのコードは次のようになり、その場合には

Any simple statement may optionally be followed by a SINGLE modifier, just 
before the terminating semicolon (or block ending). The possible modifiers 
are: 

    if EXPR 

...。

別に

==ないeqで数を比較してください。

3

ifブロックに1つのステートメントだけが含まれている場合、ブロックマーカーがオプションのプログラミング言語でこれまでの経験があると思います。 Perlでは常に必要とされます。

if (($n%10)%2 == 0) { 
    $k = $k+1; 
} 
$n = $n/10; 

私も==eqを変更した - あなたは数字ではなく文字列を比較しているように見えるよう。

1

あなたはPythonコードを書くためにPerlを使用しています。 Perlコードのほうがはるかに優れています!

while ($n>0) 
{ 
    if (($n%10)%2 eq 0) 
    $k = $k+1; 
    $n = $n/10; 
} 

whileの場合、中括弧が正しく表示されています。 ifはこの

while ($n > 0) { 

    if (($n % 10) % 2 eq 0) { 

     $k = $k + 1; 
     $n = $n/10; 
    } 
} 

のように、同じ治療を必要とする。しかしPerlはPythonのよりも多くの演算子を持っているので、私は2が10倍であるため、($n % 10) % 2$n % 2と同一であることを指摘、これを書くでしょう、そしてあなたはする必要があります代わりに、数値の平等のためのeq

while ($n) { 

    next if $n % 2; 

    ++$k; 
    $n /= 10; 
} 

==を使用して、私はあなたがおそらく両方の言語

関連する問題