Perl多线程的简单例子

perl多线程使用的一个简单例子:同时对多个ip进行ping的命令,检测各个ip地址的响应速度。

#!/usr/bin/perl
use strict;
# 声明调用的模块
use Thread;

my @ips = ("221.141.1.222", "89.46.101.122", "199.200.120.37");

my @threads;
# 创建线程并push到数组中。第一个参数是一个子程序的名字,后面的参数是输入到该子程序的数组内容。
foreach (@ips) {
    push @threads, threads->create(\&ping,$_);
}

# 子程序join到主线程,取得返回值。
foreach (@threads) {
    $_->join();
}

# 子程序,对ip地址ping5次,得到其平均值。
sub ping {
    $_ = shift;
    my $ping_log = `ping -c 5 $_`;
    my @ping_log = split /\n/, $ping_log;
    my $time = 0;
    foreach (@ping_log) {
        $time += $1 if /time=(.*) ms/;
    }
    my $avg_time = $time / 5;
    $time = "na" if $time == 0;
    print "$_\t$avg_time\n";
}

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据