perl – 标量值错误(使用IO :: Socket)

perl – 标量值错误(使用IO :: Socket),第1张

概述这是我目前的代码: #!/usr/bin/perl -wuse strict;require IO::Socket;while (<>) { chomp(my $host = $_); my @header; print "Connecting to: $host\n"; my $socket = new IO::Sock 这是我目前的代码:

#!/usr/bin/perl -wuse strict;require IO::Socket;while (<>) {        chomp(my $host = $_);        my @header;        print "Connecting to: $host\n";        my $socket = new IO::Socket::INET(                PeerAddr => $host,PeerPort => 80,Proto => 'tcp') || print "Could not connect: $!\n";        print "Connected.\n";        print $socket "GET / http/1.0\n\n";        my $i = 0;        while (<$socket>) {                @header[$i] = $_;                $i++;        }        $i = 0;        print "--------------------------------------\n";        while ($i <= 8) {                print "@header[$i++]";        }        print "-------------------------------------\n";        print "Finished $host\n\n";}

如果在浏览IP列表时,主机已关闭,而不是继续下一个IP,它将给出一个错误“不能使用字符串(”1“)作为符号引用,而”严格引用“使用”.

如果我然后更改@header [$i] = $;到$he​​ader [$i] = $;我也得到了同样的错误.如何使这个脚本更好.

解决方法 问题在于你设置$socket的方式:

my $socket = new IO::Socket::INET(        PeerAddr => $host,Proto => 'tcp') || print "Could not connect: $!\n";

因为你正在使用||运算符,其具有比=更高的precedence,此语句被解析为

my $socket = (new IO::Socket::INET(...) || print ...);

如果新IO :: Socket :: INET返回false值(如果连接失败则会执行),将执行打印并将其返回值(通常为1)分配给$socket.
然后,当您尝试在声明中使用$socket作为indirect object时:

print $socket "GET / http/1.0\n\n";

Perl注意到值1实际上不是对象引用并抛出您报告的错误.

如果您使用低优先级运算符或代替||,$socket的值将是undef而不是1,并且您收到的错误消息将类似于无法使用未定义的值作为符号引用….当然,这实际上不会解决您的问题,但至少它可能使诊断更容易.

要真正解决问题,您需要修复代码,以便在连接失败时不会继续执行循环体的其余部分.一种方法是这样的:

my $socket = new IO::Socket::INET(        PeerAddr => $host,Proto => 'tcp');unless ($socket) {        print "Could not connect: $!\n";        next;  # skip the rest of the loop}
总结

以上是内存溢出为你收集整理的perl – 标量值错误(使用IO :: Socket)全部内容,希望文章能够帮你解决perl – 标量值错误(使用IO :: Socket)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1265173.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存