第十三章 字符串和排序
使用索引寻找子串
$where = index($big, $small);
返回第一个字符的位置,从0开始编号。不存在则返回-1。
$where1 = index($stuff, "w");
$where2 = index($stuff, "w", $where+1); 从$where+1后开始查询。
找到某个子串最后出现的位置: rindex
---------------------------
使用substr操作子串
$part = substr($string, $initial_position, $length);
如果省略到第三个参数,则一直返回到结尾处。
$out = substr("some very long string", -3, 2);从倒数第三个字符,往后2个字符。
-1是最后一个元素。
---------------------------
substr返回值可以是左值。
my $string = "Hello, world!";
substr($string, 0, 5) = "Goodbye"; #$string现在是"Goodbye, world!"
substr($string, -20) =~ s/fred/barney/g; 最后20个字符中的fred替换成barney
---------------------------
sprintf返回的时被请求的字符串,而非打印出来。
my $data_tag = sprintf "%4d%02d%02d", $year, $month, $day;
%02d中的0表阿什如果需要,在前面补0,以达到需要的宽度。
在货币数字中经常使用sprintf。
my $money = sprintf "%.2f", 2.49999f; 显示2.50
--------------------------
高级排序
a在b前面返回-1。在后面返回1。无关紧要返回0。
sub by_number {
if ($a < $b) { -1} elsif ($a > $b) {1} else {0}
}
my @result = sort by_number @some_numbers;
第十四章 进程管理
调用unix的date命令:system "date";
system 'ls -l $HOME'; 因为这里有$,所有用单引号更方便。
执行成功,返回0。
!system "rm -rf files_to_delete" or die "something wrong";
-----------------------
exec执行后,不会回到原来程序,直接退出。
环境变两:通过%ENV这个hash变量得到。
改变环境变量:
$ENV{'PATH'}="/home/rootbeer/bin:$ENV('PATH')";改变PATH环境变量
delete $ENV{'IFS');删除一个环境变量
system和exec的输出结果默认是输出到perl标准输出。如果需要得到返回结果作为字符串保存,则用反引号:
chmop(my $now = `date`);
得到一系列命令的doc:
my @functions = qw { int rand sleep length hex eof not exit sqrt unmask };
my %about;
foreach (@functions) {
$about{$_} = `perldoc -t -f $_`;
}
将错误信息也返回
my $output_with_errors = `test 2>&1`;
在list context中使用反引号
标量环境使用反引号,则将多行结果放入列表中。
foreach (`who`) {
xxx
}
开始一个并发(并行)子进程的语法是将命令作为“文件名”传给open,并在其前面或后面加上|。这被称为管道打开。
open DATE, "date|" or die "cannot open pipe from date: $!";将把date命令的输出通过DATE文件句柄读入
open MAIL, "|mail merlyn" or die "cannot pipe to mail: $!"; 将把mail命令的输入通过MAIL文件句柄
然后访问:
my $now = ;
print MAIL "test";
再比如一个find文件命令,希望找到一个结果就输出,而不是结束后统一输出:
open F, "find / -atime +90 -size +1000 -print|" or die "for: $!";
while () {
chomp;
printf "%s size %d K last accessed on %s\n
", $_, (1023 + -s $_)/1024, -A $);
}
发信号:
kill 2, 4201 or die "cannot signal 4201 with SIGINT: $!";
第十五章 Perl模块
常用模块
1。FILE::Basename
use FILE::Basename;
my $name = "/usr/local/bin/perl";
my $basename = basename $name;得到perl
use FILE::Basename qw/basename/; 仅引入basename函数
dirname获得路径名
basename获得文件名
2. FILE::Spec
my $new_name = FILE::Spec->catfile($dirname, $basename);
把目录和文件名连接起来,并且符合所在的平台标准。
3。数据库
use DBI;
$dbh = DBI->connect($data_source, $username, $password);
$sth = $dbh->prepare("SELECT * FROM foo WHERE bla");
$sth->execute();
@row_ary = $sth->fetchrow_array;
$sth->finish;
$dbh->disconnect();
第十六章 高级内容
1. eval
把可能引起程序崩溃的代码放在eval中,错误信息方在$@中。
eval {$barney = $fred / $dino };
print "an error occured: $@" if $@;
eval {
xxx;
xxx;
xxx;
}
eval会捕捉任何在其运行期间的严重错误。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11903161/viewspace-691761/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11903161/viewspace-691761/