关于perl

本文详细介绍了Perl中常用函数及其应用,并演示了如何在Perl中连接MySQL数据库及AMI服务器,提供了多进程操作示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、        Perl中常见的函数

1.    chop函数会砍掉字符串变量的最后一个字符,并返回砍掉的字符。示例:$last_char = chop($var);

2.    split函数 split(/pattern/,$text,limit)其中/pattern/是文字处理模式,而limit是代表要分割的个数,一般可以省略。

3.    keys函数 keys(%array) 取出关联数组%array中全部的key.

4.    Values函数 values(%array) 取出关联数组%array中全部的value.

5.    reverse函数 reverse(@array)将数组中的元素由后到前重新排列。

6.    sort函数 sort(@array)将数组中的元素由小到大排列

7.    length函数 length($string)求字符串中$string的字节值

8.    substr函数 substr($string,offset,length)返回给定字串的子串。Offset代表起始字符的位置,length代表引用的字符串的长度。

9.    index函数 index($string,$substring,position)在字串中寻找子串。

10.  push函数 push(@array,$string)在数组中添加新的元素到数组的末尾

11.  pop函数 pop(@array)将数组的最后的一个元素删除,并将删除的元素返回

12.  unshift函数在数组的第一个元素前附加新的元素。

13.  shift函数将数组的第一个元素删除,并返回

14.  join函数 join($string,@array) 在数组@array的元素之间加上一些指定的字符$string,并将结果返回。

15.  grep函数 grep(/pattern/,@array)将符合文字处理模式的数组元素找出来。

16.  rand函数 rand($interger)常和srand配合来取随机数。

二、        在perl中连接数据库

  

sub  connect_mysql

{

my   %info =(dbname=>$CCMS_GENERAL{'database'}{'dbname'},

              dbhost=>$CCMS_GENERAL{'database'}{'dbhost'},

             dbport=>$CCMS_GENERAL{'database'}{'dbport'},

              dbuser=>$CCMS_GENERAL{'database'}{'dbuser'},

             dbpasswd=>$CCMS_GENERAL{'database'}{'dbpasswd'},

             dbsock=>$CCMS_GENERAL{'database'}{'dbsock'});

$dbh=DBI->connect("DBI:mysql:database=$info{'dbname'};host=$info{'dbhost'};port=$info{'dbport'};mysql_socket=$info{'dbsock'}",$info{'dbuser'},$info{'dbpasswd'})ordie "Can't Connect Database Server: $!";

return($dbh);

}

三、        在perl中连接AMI

sub connect_ami

{

my    ($res,$ret1);

my    %info = (host=>'localhost',

               port=>5038,

               user=>'ccms',

               secret=>'ccms'

              );

#CONNECT

my    ($host,$addr,$msg);

      $host = inet_aton($info{'host'});

     socket($SOCK,AF_INET,SOCK_STREAM,getprotobyname('tcp'));

      $addr = sockaddr_in($info{'port'},$host);

      connect($SOCK,$addr) or die "Can'tConnect to Asterisk Manager Port : $!";

      $msg = <$SOCK>;

      if ($msg !~ /Asterisk Call Manager/){

             die "Connect not ok!";

             exit;

      }

      send($SOCK,"ACTION:LOGIN\r\nUSERNAME: $info{'user'}\r\nSECRET: $info{'secret'}\r\nEVENT:ON\r\n\r\n",0);

      $res = <$SOCK>;

      if ($res =~ /Success/){

          $ret1 = "a";

     }else{

          $ret1 = "b";

      }

return($ret1);

}

四、        多进程

use Socket;

use DBI;

use strict;

use warnings;

use POSIX ":sys_wait_h";

my $num_proc=0;

my $num_collect=0;

my $zombies;

my $collect;

$SIG{CHLD}=sub{$num_proc--};

for (my $i = 0; $i < 10; $i ++){
    ## == fork a new process ==
    my $pid = fork();
    if (!defined($pid)) {
        print "Error in fork: $!";
        exit 1;
    }
    if ($pid == 0) {
        ## == child proc ==
        print "Child $i : My pid =$$\n";
        sleep(5);
        print "Child $i : end\n";
        exit 0;
    }
    ## == if need to collect zombies ==
    if ($zombies > 0) {
        while (($collect = waitpid(-1, WNOHANG))> 0) {
            $zombies --;
        }
    }
    sleep(1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值