在Perl中,如何在不生成警告的情况下检查Socket选项的存在?

Rob*_*nes 4 sockets perl network-programming

我正在使用Perl检查各种套接字选项的存在和默认值.

#!/usr/bin/perl -w
use strict;
use Socket;

if (defined(SO_BROADCAST)) {
    print("SO_BROADCAST defined\n");
}

if (defined(SO_REUSEPORT)) {
    print("SO_REUSEPORT defined\n");
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时输出:

SO_BROADCAST defined

Your vendor has not defined Socket macro SO_REUSEPORT, used at ./checkopts.pl line 9

有没有办法在输出中不生成警告的情况下执行此操作?

bri*_*foy 9

该消息来自AUTOLOADSocket.pm.当它找到一个不受支持的常量时,它就是croak.你可以用eval来捕获它:

 use Socket;

 if( defined eval { SO_REUSEPORT } ) {
      ...;
      }
Run Code Online (Sandbox Code Playgroud)