7

在 perdoc Socket页面中,他们使用套接字的全局文件句柄。但是,如果我在子进程调用的子例程中创建一个套接字,那么使用仍然使用 Socket 的词法文件句柄会更好吗?

像这样:

use strict;
use Socket;
sub sendData
{
    my $proto = getprotobyname('tcp');
    my $socket;
    socket($socket, PF_INET, SOCK_STREAM, $proto);
    ...
    close($socket)
}

代替:

sub sendData
{
    my $proto = getprotobyname('tcp');
    socket(SOCKET, PF_INET, SOCK_STREAM, $proto);
    ...
    close(SOCKET)
}

似乎还可以,但是我不知道这是更好的做法还是完全没用...

谢谢

4

3 回答 3

10

是的,使用词法文件句柄是一种更好的做法。但是 Perl 5.0 没有它们,所以有很多使用全局文件句柄的旧代码和文档,其中大部分还没有更新为使用词法句柄。

PS你知道你可以说

socket(my $socket, PF_INET, SOCK_STREAM, $proto);

而不是放在my前一行,对吧?

于 2012-05-09T09:50:18.987 回答
1

是的,使用词法范围而不是全局总是更好。如果您需要唯一的句柄,尽管是全局的,请尝试Symbol 包

于 2012-05-09T10:08:44.157 回答
1

Socket如果您需要对套接字的配置方式进行一些低级调整,该模块很有用,但对于大多数用途(如果不是几乎所有用途),该IO::Socket::INET模块提供了一个更简单的界面。它的构造函数将套接字句柄作为对象返回,无需担心全局文件句柄。

于 2012-05-09T13:44:08.223 回答