私は小さなサーバーをperlで書いています。少し問題があります。クライアントがこの "op:xxx:xxx:xxx"のような文を私に渡すと、私はopを得るでしょう。 opが何であるかに応じて処理を行います。 opが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
あなたは何を求めようとしているのか分かりません。エラーメッセージが表示されますか?そうでない場合は、予期せぬ出力が出ていますか?もしそうなら、サンプル入力とそれに対応する予想出力と実際の出力を与えてください。 –