一、 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);
}