2014-10-09 16 views
4

我想在perl中做一個套接字數組,並在每個套接字的末尾添加一個\n,我嘗試使用&socket[0],但它不起作用。perl中的套接字數組

my @socket1; 
$socket1[0] = IO::Socket::INET->new(
    Type  => SOCK_STREAM, 
    PeerAddr => "127.0.0.1", 
    Proto => "tcp", 
    PeerPort => $dbase_param{camera_stream} 
) or die "Cannot open socket on port " . $dbase_param{camera_stream} . ".\n"; 

print $socket1[0] "\n"; 

當我做print $socket1[0] "\n";它不會編譯。

,但如果我不使用它工作的數組:

my $socket1; 
$socket1 = IO::Socket::INET->new(
    Type  => SOCK_STREAM, 
    PeerAddr => "127.0.0.1", 
    Proto => "tcp", 
    PeerPort => $dbase_param{camera_stream} 
) or die "Cannot open socket on port " . $dbase_param{camera_stream} . ".\n"; 

print $socket1 "\n"; 
+2

'@ cppcoder'沒有,因爲如果我這樣做'$打印SOCKET1 [0] 「\ n」;'它會打印'socket1 [0]',然後打印'「\ n」'但我想在套接字中加入'「\ n」'。 – leykan 2014-10-09 09:55:45

+0

二級備註:我建議不要在'die'消息的末尾添加換行符'\ n',因爲這會隱藏行號信息。 – Miller 2014-10-09 19:16:51

回答

5

print的文件句柄需要一個水珠或簡單的標量(塊的可能的結果)。這應該工作:

print { $socket1[1] } "\n"; 
5

嘗試的語法如下:

$socket1[0]->print("\n"); 
+1

用作'IO :: Handle'子類總是比奇怪的間接對象語法更好 – LeoNerd 2014-10-09 10:48:12

2

或者您可以使用syswrite()send()。此外,這是更推薦的接口來處理套接字,因爲這個功能不使用緩衝。而且,由於您使用的IO ::插座:: INET對象,這一切功能都可以作爲方法

$socket[1]->print("\n"); 
$socket[1]->syswrite("\n"); 
$socket[1]->send("\n");