当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > perl

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

Unix/Linux 中的 perl


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 46 ::
收藏到网摘: n/a

Perl 尝试一些聪明( 或 stupid) 的想法时, 错误难免会发生. 有经验的 Perl 程序员常常使用三个参数来提前找到错误所在,
Perl 有很多命令行参数. 通过它, 我们有机会写出更简单的程序. 在这篇文章里我们来了解一些常用的参数. Safety Net Options 在使用 Perl 尝试一些聪明( 或 stupid) 的想法时, 错误难免会发生. 有经验的 Perl 程序员常常使用三个参数来提前找到错误所在, -C 是第一个. 这个参数编译 Perl 程序但不会真正运行它. 由此检查所有语法错误. 每次修改 perl 程序之后我都会立刻使用它来找到任何语法错误. 代码:$ perl -c program.pl-W 是第二个参数. 它会提示你任何潜在的问题. Perl 5.6.0 之后的版本已经用 use warnings; 替换了 -w .你应该使用 use warnings 因为它要比 -w 更灵活. -T 是第三个参数. 它把 perl 放到了 tain 模式. 在这个模式里, Perl 会质疑任何程序外传来的数据. 例如,从命令行读取, 外部文件里读取 或是 CGI 程序里传来的数据. 这些数据在 -T 模式里都会被 Tainted 掉. Tainted 数据不可以被用来和外部交互. 例如 使用在 system 调用和用作 open 的文件名. perlsec 文档里有更多什么数据会被Tainted 掉的例子. 要想使用 Tainted 的数据就需要 untaint这个数据. untaint 是通过正则表达式来实现.这里我不会太多的讲述 taint 模式. 如果你要编写的程序 (例如 CGI 程序) 需要从从用户那里接受不可知的输入, 我推荐使有 taint 模式 -d ,Perl Debugger , 在这里值得一提但我们无法顾及, 我推荐阅读文档 'perldoc perldebug' 或 Richard Foley 的 Perl Debugger Pocket Reference 一书. Command-Line Programs 下面的几个 Perl 参数可以让短小的 Perl 程序运行在命令行. -e 可以让 Perl 程序在命令行上运行.例如, 我们可以在命令行上运行 "Hello World" 程序而不用把它写入文件再运行. 代码:$ perl -e 'print "Hello Worldn"'多个 -e 也可以同时使用, 运行顺序根据它出现的位置. 代码:$ perl -e 'print "Hello ";' -e 'print "Worldn"'象所有的 Perl 程序一样, 只有程序的最后一行不需要以 ; 结尾. 虽然你也可以象通常一样引用模块, 但 -M 让它变得更容易. 代码: $ perl -MLWP::Simple -e 'print head "http://www.example.com"'-M模块名 和 use 模块名 一样. 如果不想引入模块的缺省值, 你可以使用 -m. -m模块名 和 use 模块名() 一样. 例如下面这个例子, 因为 head 函数是缺省引入,而使用 -m 时就不会, 结果是没有输出. 代码: $ perl -mLWP::Simple -e 'print head "http://www.example.com"'-m 和 -M 通过 = 来引入某个模块的特别函数. 代码:$ perl -MCGI=:standard -e 'print header'这里, CGI.pm 的 ":standard" 被引入, header 函数因此可以使用.要引入多个参数可以通过使用引号和逗号. 代码:$ perl -MCGI='header,start_html' -e 'print header, start_html'这里我们引入了 header 和 start_html 函数. Implicit Loops -n 和 -p 增加了循环的功能, 使你可以一行一行来处理文件. 代码:$ perl -n -e 'some code' file1这与下面的程序一样. 代码:LINE: while (<>) { # your code goes here }<> 打开命令行里的文件,一行行的读取.每一行缺省保存在 $_ 代码: $ perl -n -e 'print "$. - $_"' file上面的这一行可以写成 代码: LINE: while (<>) { print "$. - $_" }输出当前行数 $. 和当前行 $_. -p 可以让上面的程序变得更容易. -p 会输出 $_ 就像这样 代码:LINE: while (<>) { # your code goes here } continue { print or die "-p destination: $!n"; }continue 在这里保证print 在每次循环都会被调用. 使用 -p, 我们的打印行数程序可以改为 代码: $ perl -p -e '$_ = "$. - $_"'注意到那个 LINE: 标签 ? 我们可以利用它来跳到下一个循环. 使用 next LINE 代码: $ perl -n -e 'next LINE unless /pattern/; print $_'如果想在循环的前后做些处理, 可以使用 BEGIN 或 END block. 下面的这一行计算文件里的字数. 代码: $ perl -ne 'END { print $t } @w = /(w+)/g; $t += @w' file.txt每一行所有匹配的字放入数组 @w , 然后把 @w 的元素数目递加到 $t. END block 里的 print 最后输出文件总字数. 还有两个参数可以让这个程序变得更简单. -a 打开自动分离 (split) 模式. 空格是缺省的分离号. 输入根据分离号被分离然后放入缺省数组 @F. 由此,我们可以把上面的程序改写为 代码:$ perl -ane 'END {print $x} $x += @F' file.txt你也可以通过 -F 把缺省的分离号改为你想要的.例如把分离号定为非字符: 代码:$ perl -F'W' -ane 'END {print $x} $x += @F' file.txt下面通过 Unix password 文件来介绍一个复杂的例子. Unix password 是文本文件, 每一行是一个用户记录, 由冒号 : 分离. 第 7 行是用户的登录 shell 路径. 我们可以得出每一个不同 shell 路径被多少个用户使用 : 代码: $ perl -F':' -ane '$s++;' > -e 'END { print "$_ : $s" for