标量发现了运营商的预期

时间:2017-11-20 13:48:48

标签: perl

我不认为这是重复的,因为我一直在寻找具有相同头衔的所有其他科目。所以,这是我的代码:

    'use strict';

    /**
     * @ngdoc function
     * @name bitbloqApp.controller:softwareTabCtrl
     * @description
     * # softwareTabCtrl
     * Controller of the bitbloqApp
     */
    angular.module('bitbloqApp')
        .controller('softwareTabCtrl',softwareTabCtrl);

    function softwareTabCtrl( $rootScope, $scope, $timeout, $translate, $window, bloqsUtils, bloqs, bloqsApi,
            $log, $document, _, ngDialog, $location, userApi, alertsService, web2board, robotFirmwareApi, web2boardOnline, projectService,
            utils) {
//code
};

我制作了一个程序,可以计算出数字n中有多少个偶数 当我尝试运行我的程序时,会显示以下错误:

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

第7行将是:

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 "

3 个答案:

答案 0 :(得分: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作为语句修饰符:

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

...在这种情况下,您的代码将如下所示:

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

...但是this usage is discouraged

除此之外:将数字与==而不是eq进行比较。

答案 1 :(得分:3)

我猜你有编程语言的经验,如果if块只包含一个语句,则块标记是可选的。在Perl中,它们总是必需的。

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

我还将eq更改为== - 因为看起来您正在比较数字,而不是字符串。

答案 2 :(得分:1)

您正在使用Perl编写Python代码。这对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有更多的运算符,所以我会写这个,注意( $n % 10 ) % 2$n % 2相同,因为2是10的因子,你应该使用{{1}而不是==用于数字相等

eq

我认为你应该强制while ( $n ) { next if $n % 2; ++$k; $n /= 10; } 成为两种语言的整数