我在perl中使用套接字连接编写一个简单的代码:
$sock = new IO::Socket::INET(
PeerAddr => '192.168.10.7',
PeerPort => 8000,
Proto => 'tcp');
$sock or die "no socket :$!";
Run Code Online (Sandbox Code Playgroud)
然后使用循环发送数据:
while...
print $sock $str;
...loop
Run Code Online (Sandbox Code Playgroud)
有没有办法在循环中插入一个命令来检查连接?就像是:
while...
socket is up?
yes => send data
no => connect again and the continue with loop
...loop
Run Code Online (Sandbox Code Playgroud)
编辑添加我的代码:
my $sock = new IO::Socket::INET(
PeerAddr => '192.168.10.152',
PeerPort => 8000,
Proto => 'tcp');
$sock or die "no socket :$!";
open(my $fh, '<:encoding(UTF-8)', 'list1.txt')
or die "Could not open file $!";
while (my $msdn …Run Code Online (Sandbox Code Playgroud) 以下是我正在研究的一个简单的代码示例.它只是启动一个线程,等待5秒,然后终止它.
#!/usr/bin/perl
use strict;
use warnings;
use threads;
sub thread_sub
{
threads->create(sub
{
sleep 5; # HERE A WHILE ROUTINEs EMULATED BY SLEEP
threads->detach();
});
}
thread_sub();
exit;
Run Code Online (Sandbox Code Playgroud)
但结果是:
# ./multithread.pl
Perl exited with active threads:
1 running and unjoined
0 finished and unjoined
0 running and detached
Run Code Online (Sandbox Code Playgroud)
这是因为它运行线程但在退出之后没有等待.那么,我怎样才能在退出前等待线程完成?我知道有is_running,但我不知道如何在我的代码中实现它.遗憾的是,报告的代码只是一个了解如何实现is_running的示例.谢谢.
我必须在循环IN PERL期间每秒执行一次命令.我正在使用纪元时间尝试以下示例代码,但它不起作用,因为它连续打印:
#!/usr/bin/perl
my $checktime = time() + 1;
while(1) {
if ( $checktime => time() )
{
print "This should be print each second..." . "\n";
$checktime = time() + 1;
}
# DO SOMETHING ELSE
}
Run Code Online (Sandbox Code Playgroud)
我不能使用sleep或freeze命令,因为在循环期间我必须执行其他命令而不中断执行.请你帮助我好吗?
谢谢卢卡斯