Perl
跳转到导航
跳转到搜索
正则表达式
写法
字母 m 后接由匹配的分隔符括起来的字符串。分隔符是 / 时 m 可以省略。正则字符串与普通的字符串一样内部会进行变量替换。默认对 $_
进行匹配,使用 $val =~ /re/
的形式来处理其他来源的字符串。
使用 s///
形式来进行替换。如果使用配对的字符作为分隔符,那么需要连续使用两对(不一定相同)。它会修改被匹配的变量,默认为 $_
。返回布尔值。
后向引用使用 \
前缀而在进行匹配后使用 $n
的形式引用子匹配。没有匹配到的部分为空串。不支持 $0
。
标志
i
- 忽略大小写
s
- 点号
.
匹配换行符 x
- 忽略空格字符以及注释(注释中不能有闭分隔符)
g
- 全局匹配(m)或替换(s)
示例
print "Please answer 'yes' or 'no': ";
chomp($_ = <STDIN>);
if(/yes/i) { #大小写无关
# do something
}
特殊变量
$^I
- 备份文件后缀。默认为
undef
(不写回)。设为空串则不创建备份 $ARGV
<>
目前正在处理的文件名(标准输入为-
)$`
和$'
- 被正则抓到部分之前和之后的文本
$<
- 用户 ID(UID)
$/
- 声明一个局部的
$/
(值为undef
)将导致<FHANDLE>
读取整个文件的内容
时间和日期
time
- 返回 UNIX 时间戳
gettimeofday
- 类似 C 语言中者。在
Time::HiRes
包中
#!/usr/bin/perl
use Time::HiRes qw(gettimeofday);
sub gettime {
my ($sec, $usec) = gettimeofday;
$sec * 1000_100 + $usec;
}
my $times = 100;
my $start = gettime;
for(my $var = 0; $var < $times; $var++){
`$ARGV[0]`;
}
my $end = gettime;
printf "%lfus\n", ($end - $start) / $times;
命令行用法
取代sed
perl -pi -e 's/regex/replacement/g' #相当于 sed -i 's/regex/replacement/g'
取代awk
使用 -a
参数使得 @F
为每行的数据。默认按空白分割,使用 -F
来指定其它分隔符。
perl -F: -ane 'print $F[5],"\n" if $F[0] eq getlogin;' /etc/passwd
工具脚本
- rename, perl-rename(Arch下),批量文件重命名
- show_all_colors(Arch下 perl-term-extendedcolor 软件包),显示终端色彩
- psh, Perl 的交互式命令行(不支持 readline)
外部链接
- Perl 正则表达式 8 大原则
- Perl6::Perl5::Differences
- UNIX tools vs Perl - Perl Wiki
- 使用perl的“WWW::Mechanize”模块编写操作网页的自动化脚本 - asuerhao's Blog
- Perl is not Dead, it is a Dead End // Speaker Deck
- Perl 程序员应该知道的事。英文原文:Perl 101
- Perl的基本語法