我正在用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