gpt4 book ai didi

perl - 在Perl中使用sockaddr_in()导致此使用错误的原因是什么?

转载 作者:行者123 更新时间:2023-12-03 11:59:12 24 4
gpt4 key购买 nike

这个问题几乎使我发疯(在Perl调试器中运行):

  DB<3> x sockaddr_in(123, inet_aton('localhost'))
usage: (port,iaddr) = sockaddr_in(sin_sv) at (eval 7)[/usr/lib/perl5/5.18.2/perl5db.pl:732] line 2.

然而:
  DB<10> x $a = sockaddr_in(123, inet_aton('localhost'))
0 "\cB\c@\c@{\c?\c@\c@\cA\c@\c@\c@\c@\c@\c@\c@\c@"

这是我知道的唯一一个示例,在该示例中,我无法直接在Perl调试器中打印函数调用的结果(但仅在将其分配给变量之后)。

这也是我知道的唯一函数,当使用正确的参数调用该函数时会输出使用错误。

谁能解释?

最佳答案

调试器不是问题,这是sockaddr_in在列表上下文中与两个参数一起使用时发出的警告。

$ perl -MSocket -wE 'say length(sockaddr_in(123,inet_aton("localhost")))'
16

$ perl -MSocket -wE 'say sockaddr_in(123,inet_aton("localhost"))'
usage: (port,iaddr) = sockaddr_in(sin_sv) at -e line 1.
sockaddr_in具有两种调用语法。它可以将未打包的端口和地址转换为打包的套接字地址(将两个元素的列表转换为标量),也可以将打包的套接字地址转换为端口和地址(将标量转换为两个元素的列表)。
$sockaddr = sockaddr_in($port,$ip_address);
($port,$ip_address) = sockaddr_in($sockaddr);

它可以通过传递给函数的参数数量以及函数调用的上下文来判断请求哪个操作,并在两者不一致时发出警告。

关于perl - 在Perl中使用sockaddr_in()导致此使用错误的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com