标签为 "perl" 的存档

linux中select()函数分析,同样适用于Python/Perl中的socket多线程select

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作的程序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。下面详细介绍一下!

Select的函数格式(我所说的是Unix系统下的伯克利socket编程,和windows下的有区别,一会儿说明):

int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);

先说明两个结构体:

第一,struct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(file descriptor),即文件句柄,这可以是我们所说的普通意义的文件,当然Unix下任何设备、管道、FIFO等都是文件形式,全部包括在内,所以毫无疑问一个socket就是一个文件,socket句柄就是一个文件描述符。fd_set集合可以通过一些宏由人为来操作,比如清空集合FD_ZERO(fd_set *),将一个给定的文件描述符加入集合之中FD_SET(int ,fd_set *),将一个给定的文件描述符从集合中删除FD_CLR(int ,fd_set*),检查集合中指定的文件描述符是否可以读写FD_ISSET(int ,fd_set* )。一会儿举例说明。

第二,struct timeval是一个大家常用的结构,用来代表时间值,有两个成员,一个是秒数,另一个是毫秒数。
Read more…

perl DBD::mysql perl module hasn’t been fully installed–如何安装DBD::mysql模块

在windows下的Activeperl中使用DBI模块连接mysql数据库时,被报错,提示DBD::mysql perl module hasn’t been fully installed
需要进行安装。以下是错误信息。

install_driver(mysql) failed: Can't locate loadable object for module
+DBD::mysql in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at
+ (eval 4) line 3
Compilation failed in require at (eval 4) line 3.
Perhaps a module that DBD::mysql requires hasn't been fully installed

Read more…

perl范围声明our,my,local

perl中的三个范围声明 our,my,local

一、our,”把名字限于某个范围“,其实就是明确声明一个”全局变量”,虽然是在某个模块或者函数里面定义的,外面的也可以访问,如果已经声明过了,再次用”our”,表示此处用的是全局的那个,不是同名的私有或者局部变量
our $PROGRAM_NAME = "summer";
{

my  $PROGRAM_NAME = "somethingelse";
our $PROGRAM_NAME = "server"; #这里的our和外面的相同,和前句不同。
# 这里调用的代码看到的是"server"
}
# 这里执行的代码看到的仍然是"server".

Read more…

PERL 语言中的q,qw,qr,qx,qq……符号用法总结

在perl语言中,有两个特殊而常用的符号qq qw,分别解释如下:
qq{foobar}的意思为意思为双引号字符串,可内插变量
相当于 “foobar”
qw{foo bar}的意思为用空格分解字符串,得到列表,相当于如下语句
split(‘ ‘,’foo bar’) 得到的结果是’foo’,’bar’

字符串比较等于用 eq

q运算符对’号转义的方式

$someword = 'i 've some money';

可以等价于:

$someword = q~i 've some money~;

Read more…

[perl]defined的用法,defined是什么意思

用法:函数defined返回0、false或者非0、true。
此运算结果依赖于传递给它进行计算的参数的内容。
如果参数中不含有字符和数字值,则返回0;如果参数中包含一个字符或者数字值,则返回非0或者true值。
这对于判断一个已经建立的数组中的每个元素是否已经定义非常有用。

注意:此函数作用不是判断某个变量是否已经定义,而是用来判断某个变量是否为空。

Read more…