相当于默认变量不起作用

时间:2014-07-31 11:36:23

标签: perl

我有一个用Perl编写的简单服务器应用程序。这是它的工作版本。

my $client;
while ($client = $local->accept() ) { 
    print "Connected: ", $client->peerhost(), ":", $client->peerport(), "\n";  

    while (<$client>) {            

        if ($mod_ctr == -1) {
            $num_count = $_;
            init();
        }
        elsif ($mod_sayaci % 2 == 0) {
            $plus_count = $_;
        }
        elsif ($mod_sayaci % 2 == 1) {
            $minus_count = $_;
            eval();
        }

        last if m/^q/gi;
        $mod_sayaci++;
    }
    print "Server awaits..\n"; 
}

我很肯定这很有效。现在,当我更改我的代码以从客户端获取一个起始字符来确定操作而不是使用mod:

my $client;

while ($client = $local->accept() ) { 
    print "Connected: ", $client->peerhost(), ":", $client->peerport(), "\n";  

    $input;
    $operation;
    $value;
    while ($input = <$client>) {            

        $operation = substr($input, 0, 1);
        $value     = substr($input, 1, 1);

        print "input: $input \n";
        print "operation: $operation \n";
        print "value: $value \n";

        if ($operation == "r") {
            print "entered r \n";
            $num_count = $value;
            init();
        }
        elsif ($operation == "a") {
            print "entered a \n";
            $plus_count = $value;
        }
        elsif ($operation == "e") {
            print "entered e \n";
            $minus_count = $value;
            eval();
        }
        elsif ($operation == "q") {
            # will quit here
        }
    }
    print "Server awaits..\n"; 
}

在客户端,我让用户从发送r operation的请求开始。到目前为止一切正常。第一次输入后,inputoperationvalue打印效果正常,但始终会输入第一个if并打印entered r。我在这里错过了什么?

1 个答案:

答案 0 :(得分:6)

您已从使用数字更改为使用字符串来指示应执行哪些分支。您需要使用eq代替==进行字符串比较。

喜欢这个

if ($operation eq "r") {
    print "entered r\n";
    $num_count = $value;
    init();
}

此外,如果你添加

,你会做自己和任何帮助你的人
use strict;
use warnings;

到你编写的每个Perl程序的顶部。 “声明”

$input;
$operation;
$value;
除了作为评论说明在块中使用了哪些变量之外,

不做任何有用的事情。写这个

my ($input, $operation, $value);

你已经做了一些更有用的事情。