我正在用perl写一个小型服务器。有一些小问题。当客户给我一个像这样的句子“op:xxx:xxx:xxx”时,我会得到op。然后根据所做的事情做事。如果该操作是adduser等,它将起作用。 (我使用如果$ op eq“adduser”...) 但是当我得到一个“getList:xxx:xxx”并且我得到$ op = getList时,它不能像“if $ op eq”的GetList “”。我知道,这一定是我的错。但我无法找到它。 感谢大家。perl“eq”无法正常工作。我找不到我的错
use warnings;
use strict;
package MyPackage;
use base qw(Net::Server);
our %data_base;
our %tag_base;
sub list {
my %resault;
foreach (keys %tag_base) {
print STDERR $_ . "1";
my @tags = split /:/, $tag_base{$_};
foreach (@tags) {
$resault{$_} ++;
}
}
my @tags;
foreach (keys %resault) {
push @tags, "$_,$resault{$_}";
}
$_ = join ";", @tags;
print ;
print STDERR ;
}
sub users {
my $topic = shift;
my @users;
foreach (keys %tag_base) {
push @users, $_ if $tag_base{$_} =~ /$topic/;
}
$_ = join ";", @users;
print ;
}
sub process_request {
my $self = shift;
my $person;
my @info;
while (<STDIN>) {
my @gets = split /:/, $_;
print STDERR "@gets\n";
# $data_base{shift @person} = join ":", @person;
my $op = shift @gets;
$op =~ s/\s//;
print STDERR $op . "\n";
if ( $op eq "adduser") {
my $user_name = shift @gets;
if (exists $data_base{$user_name}) {
print "already_exist";
} else {
$data_base{$user_name} = join ":", @gets;
print "addUserSu";
}
} elsif ($op eq "login") {
my $login_name = shift @gets;
my $login_pw = shift @gets;
if (defined $data_base{$login_name}) {
$person = $data_base{$login_name};
@info = split /:/, $person;
$info[0] =~ s/\s+//;
if ($login_pw eq $info[0]) {
print "$person";
} else {
print "/$info[0]/";
}
} else {
print "unexist_user";
}
} elsif ($op eq "addTag") {
my $tag_user = shift @gets;
$tag_base{$tag_user} = join ":", @gets;
print "addTagSu";
} elsif ($op eq "getList") {
print STDERR "right";
&list;
} elsif ($op eq "getUsers") {
&users;
}
}
}
MyPackage->run(port => 13800);
你是什么意思“无法通过像‘如果$运算EQ‘的GetList’’......请告诉我错误? – Nick 2011-12-30 15:04:01
我不明白你想问什么。你是否收到任何错误讯息?如果没有,你会得到任何意想不到的结果?如果是这样,请给我们提供样本输入以及相应的预期和实际产出。 – 2011-12-30 15:04:49