ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Perl 小骆驼 13,14,15章笔记

Perl 小骆驼 13,14,15章笔记

原创 Linux操作系统 作者:zhaojienju 时间:2011-04-06 11:35:24 0 删除 编辑

第十三章 字符串和排序

使用索引寻找子串
$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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: linux 知识要点
请登录后发表评论 登录
全部评论

注册时间:2010-10-05

  • 博文量
    80
  • 访问量
    192599