【问题标题】:Perl socket not functioning inside functionPerl 套接字在函数内部不起作用
【发布时间】:2013-12-04 14:36:12
【问题描述】:

我正在尝试为聊天应用程序做一个多线程客户端。有 2 个线程:键盘读取(从键盘读取输入并通过套接字发送)和服务器读取(从服务器读取行并将它们打印到屏幕上)。所以,这就是我创建键盘阅读器的方法:

my $threadKeyboard = threads->create(\&readKeyboard, $socket);
$threadKeyboard->join();


sub readKeyboard {
    my $socket = @_;
    my $keydata;

    do{
        $keydata=<STDIN>;
        print $socket "$keydata\n";
    } while($data ne "bye\n");
}

但是,当我尝试运行它时,我得到了这个:

Thread 1 terminated abnormally: Can't use string ("1") as a symbol ref 
while "strict refs" in use at client.pl line 41, <STDIN> line 1.

第 41 行是:

$keydata = <stdin>;

我想问题是我没有正确地为函数提供套接字,但我不知道如何解决它:(有什么建议吗?提前谢谢!

【问题讨论】:

    标签: multithreading perl sockets symbols ref


    【解决方案1】:

    试试这些,

    my( $socket ) = @_ ; 
    
    
    my $socket = $_[0] ; 
    
    
    my $socket = shift ; 
    

    当您将数组分配给标量时,您不会得到您期望的结果。

    http://perlmaven.com/scalar-and-list-context-in-perl

    【讨论】:

    • @ikegami 感谢您纠正我的错字,西海岸的咖啡前仍然存在。
    • 非常感谢你们两个:D
    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 2013-07-07
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多