###################################################
############# perl特殊变量 ##############
###################################################
$- 当前页可打印的行数,属于Perl格式系统的一部分
$! 根据上下文内容返回错误号或者错误串
$” 列表分隔符
$# 打印数字时默认的数字输出格式
$$ Perl解释器的进程ID
$% 当前输出通道的当前页号
$& 与上个格式匹配的字符串
$( 当前进程的组ID
$) 当前进程的有效组ID
$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.
$, 当前输出字段分隔符
$. 上次阅读的文件的当前输入行号
$/ 当前输入记录分隔符,默认情况是新行
$: 字符设置,此后的字符串将被分开,以填充连续的字段.
$; 在仿真多维数组时使用的分隔符.
$? 返回上一个外部命令的状态
$@ Perl解释器从eval语句返回的错误消息
$[ 数组中第一个元素的索引号
$ 当前输出记录的分隔符
$] Perl解释器的子版本号
$^ 当前通道最上面的页面输出格式名字
$^A 打印前用于保存格式化数据的变量
$^D 调试标志的值
$^E 在非UNIX环境中的操作系统扩展错误信息
$^F 最大的文件捆述符数值
$^H 由编译器激活的语法检查状态
$^I 内置控制编辑器的值
$^L 发送到输出通道的走纸换页符
$^M 备用内存池的大小
$^O 操作系统名
$^P 指定当前调试值的内部变量
$^R 正则表达式块的上次求值结果
$^S 当前解释器状态
$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间
$^W 警告开关的当前值
$^X Perl二进制可执行代码的名字
$_ 默认的输入/输出和格式匹配空间
$| 控制对当前选择的输出文件句柄的缓冲
$~ 当前报告格式的名字
$` 在上个格式匹配信息前的字符串
$’ 在上个格式匹配信息后的字符串
$+ 与上个正则表达式搜索格式匹配的最后一个括号
$< 当前执行解释器的用户的真实ID
$ 含有与上个匹配正则表达式对应括号结果
$= 当前页面可打印行的数目
$> 当前进程的有效用户ID
$0 包含正在执行的脚本的文件名
$ARGV 从默认的文件句柄中读取时的当前文件名
%ENV 环境变量列表
%INC 通过do或require包含的文件列表
%SIG 信号列表及其处理方式
@_ 传给子程序的参数列表
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表
$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置 。
#########################################
####### perl的文件操作 #######
#########################################
大多数程序都不是孤立的,它们与它们的环境相互作用。很多的程序也需要通过文件操作实现数据的存贮和交换。文件句柄(filehandle)是Perl程序中为程序和外部世界提供I/O连接的名称。建议全部使用大写字母以示与变量等的区别。特别地,也可以将 STDIN/STDOUT/STDERR也认为是Perl的文件句柄,分别代表标准输入/标准输出/标准错误输出。
打开及关闭文件
Perl的文件操作与C语言极为相似。如:
open(FILENAME,"abc.txt");
该调用为读文件打开,若为写文件而打开,需在文件名前加上大于号:
open(FILENAME,">abc.txt");
若要追加至文件尾,可在文件名前加上两个大于号:
open(FILENAME,">>abc.txt");
以上三种open()格式在成功时返回真,失败时返回假。但程序中通常没有提示,出错时往往会被人们忽略。通常当需要给出出错提示时,可加入die()函数。例:
open(OUTFILE,">/tmp/outfile")||
die"出错,不能建立/tmp/outfile\n";
当只有open失败时,才会执行die给出出错提示。
对文件句柄的操作完成后,可以用close操作符关闭文件。如:
close(OUTFILE);
-x文件测试
Perl的文件操作也可以先测试文件是否存在,是否可读写等。如:
$x="abc.txt";
if(-e$x){#abc.txt是否存在?
#存在操作
}else{
printf"文件不存在。\n";
}
-e操作符测试文件或目录是否存在。
以下为文件测试清单:
文件测试测试操作符提供的信息
-r文件或目录可读
-w文件或目录可写
-x文件或目录执行
-o文件或目录归用户所有
-R文件或目录对真正用户可读
-W文件或目录对真正用户可写
-X文件或目录对真正用户执行
-O文件或目录归真正用户所有
-e文件或目录存在
-z文件存在且大小为0
-s文件或目录存在且不为0(返回字节数)
-f文件为普通文件
-d文件为目录
-l文件为符号链接
-p文件为命名管道(FIFO)
-S文件为一个套口(socket)
-b文件为块特殊文件
-c文件为字符特殊文件
-t打开tty控制台的文件句柄
-u文件或目录是设置用户ID号
-g文件或目录是设置用户组ID号
-k文件或目录的sticky位置位
-T文件是文本文件
-B文件是二进制文件
-M以天为单位的存在时间
-A以天为单位访问时间
-C以天为单位同代码更改时间
删除文件
Perl的unlink()操作符可实现删除文件。如:
unlink("abc.txt");#删除abc.txt
文件重命名
Perl的rename()操作符可实现文件重命名。如:
rename("abc","zmd")||die"出错,不能更名";
此时将abc更名为zmd,成功返回真,否则给出出错提示。
目录操作
Perl中处理目录非常类似于处理文件。
打开目录句柄:
opendir(ETC,"/etc")||die"出错,不能打开目录";
关闭目录句柄:
closedir(ETC);
创建目录:
mkdir("zmd",0777)||die"不能创建zmd目录";
0777为内部权限格式。
删除目录:
rmdir("zmd")||die"不能删除zmd目录"。
#########################################
########## perl的调试 ##########
#########################################
你可以使用 strict pragma 在代码中打开 strictures
use strict;
也可以用perl的 -M开关在命令行中打开它:
perl -Mstrict script.pl
Perl 会对一些有问题的结构给你警告提示。把 warning 打开,让 Perl 来帮你。
你可以在第一行用 perl的 -w 开关打开它:
#!/usr/bin/perl -w
也可以在命令行打开warning:
perl -w script.pl
你也可以使用词汇警告,它带有许多有趣的特性。更多的信息参看warnings 的帮助文档。
use warnings;
如果你不明白某个警告的意思,你可以使用 warning 的详细模式,或者在你的代码中使用诊断 pragma:
use diagnostics;
在表达式中使用某个值的时候先检查它是否正确。世界上最好的调试器就是 print。
用括号括住 $value 的原因是因为这样可以看见开头和尾巴上是否有空格或者换行
print STDERR "The value is [$value]\n";
如果这个值不是标量,那么可以使用 Data::Dumper 来打印这些数据结构。
require Data::Dumper;
print STDERR "The hash is ", Data::Dumper::Dumper( %hash ), "\n";
用perldoc命令和它的-f开关来查询某个特定的函数:
perldoc -f function_name
查询一个模块的文档:
perldoc Module::Name
检查你的模块版本:
perl -MModule::Name -le 'print Module::Name->VERSION';
有些东西是依赖环境变量的。你确定你的环境变量都是对的吗?
程序运行的时候用到的环境变量是你现在看到的环境变量吗?
记住有些 CGI 程序或cron 可能用到的环境变量和 shell 里的不一样,尤其是在不同的机器上的时候。
Perl 将环境变量存储在 %ENV 里,查看你的环境。
require Data::Dumper;
print STDERR Data::Dumper::Dumper( \%ENV );
在web程序中不要使用__END__或者__DATA__。它们会与mod_perl冲突。还有,在web程序中__PACKAGE__也许不会返回你期望的值。但它们在模块中运行良好。
#########################################
########## BSD上安装perl #########
#########################################
方法一
rsync 10.44.3.61::download/software/bsd/perl-5.8.8.tbz ./
pkg_add perl-5.8.8.tbz
方法二
cd /usr/ports/lang/perl5.8;
make install clean;
pkg_add -r perl5.8
#########################################
########## perl CGI知识 #########
#########################################
1、POST方式
read(STDIN,$POST,$ENV{'CONTENT_LENGTH'})
2、GET方式
$GET=$ENV{'QUERY_STRING'}
#########################################
########## perl模块安装 #########
#########################################
手工安装的步骤:
从 CPAN 下载要安装的模块
wget
tar zxvf libwww-perl-5.805.tar.gz
cd ./libwww-perl-5.805
生成 makefile:
perl Makefile.PL
make && make install
cd ..
r测试模块,如果下面的命令没有给出任何输出,那就没问题。
$>perl -MDBI -e1m -rf libwww-perl-5.805*
使用 CPAN 模块自动安装:
安装前需要先联上网,并且您需要取得root权限。
perl -MCPAN -e shell
初次运行CPAN时需要做一些设置,如果您的机器是直接与因特网相联(拨号上网、专线,etc.),那么一路回车就行了,只需要在最后一步选一个离您最近的 CPAN 镜像站点。例如我选的是位于国内的 。否则,如果您的机器位于防火墙之后,还需要设置ftp代理或http代理。下面是常用 ppm 命令。
获得帮助
cpan>help
列出CPAN上所有模块的列表
cpan>m
安装模块,自动完成DBI模块从下载到安装的全过程。
cpan>install DBI
退出
cpan>quit
#########################################
### 检查perl安装了哪些模块的2种方法 ###
#########################################
1、
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
print join " \n", $inst->modules();
2、
perldoc perllocal
#****************************************************
#*********** perl的HTTP::Date包安装方法 *************
#****************************************************
wget
rsync 10.44.3.61::download/software/perl/libwww-perl-5.805.tar.gz ./
tar zxvf libwww-perl-5.805.tar.gz
cd ./libwww-perl-5.805
perl Makefile.PL
make && make install
cd ..
rm -rf libwww-perl-5.805*
rsync 10.44.3.61::download/software/perl/URI-1.35.tar.gz ./
tar zvxf URI-1.35.tar.gz
cd URI-1.35
perl Makefile.PL
make && make install
cd ..
阅读(1269) | 评论(0) | 转发(0) |