🎯 Perl 命令用法详解
perl 是 Practical Extraction and Report Language 的缩写,是一种功能强大的脚本语言,在 Linux 系统中广泛用于文本处理、系统管理和网络编程。
📦 基本语法
bash
perl [选项] [程序文件] [参数...]
perl -e '代码' [参数...]
💡 常用命令行选项
| 选项 | 说明 | 示例 |
|---|---|---|
-e |
直接在命令行执行 Perl 代码 | perl -e 'print "Hello\n"' |
-n |
循环处理输入的每一行 | perl -ne 'print if /pattern/' file |
-p |
循环处理并打印每一行 | perl -pe 's/old/new/' file |
-i |
原地修改文件 | perl -i -pe 's/old/new/' file |
-l |
自动处理行尾(chomp) | perl -lne 'print' file |
-a |
自动分割行到 @F 数组 | perl -ane 'print $F[0]' |
-F |
指定 -a 的分隔符 |
perl -F: -ane 'print $F[0]' |
-c |
只检查语法不执行 | perl -c script.pl |
-w |
启用警告 | perl -w script.pl |
-M |
加载模块 | perl -MData::Dumper -e '...' |
-d |
调试模式 | perl -d script.pl |
-V |
显示 Perl 配置 | perl -V |
🔧 实用示例
1. 文本处理一行命令
bash
# 替换文本
perl -pe 's/foo/bar/g' file.txt
perl -i -pe 's/old/new/g' *.txt # 原地修改
# 删除空行
perl -ne 'print if !/^$/' file.txt
perl -i -ne 'print if !/^$/' file.txt # 原地删除
# 提取匹配行
perl -ne 'print if /error/i' logfile.txt
# 行号
perl -ne 'print "$.: $_"' file.txt
# 统计行数/单词数
perl -lne 'END { print $. }' file.txt # 行数
perl -lne '$words += split; END { print $words }' file.txt # 单词数
2. 文件处理
bash
# 批量重命名
perl -e 'for (@ARGV) { $new = s/\.txt$/.bak/r; rename $_, $new }' *.txt
# CSV 处理
perl -F, -ane 'print $F[2] if $F[0] > 100' data.csv
# JSON 处理
perl -MJSON -ne '$d=decode_json($_); print $d->{key}' file.json
# XML 提取
perl -ne 'print "$1\n" while /<title>(.*?)<\/title>/g' file.xml
3. 系统管理
bash
# 查找大文件
find . -type f -exec perl -e 'print "$ARGV[0]\t" . -s $ARGV[0] . "\n"' {} \;
# 进程监控
ps aux | perl -ane 'print if $F[2] > 10.0'
# 磁盘使用
df -h | perl -ane 'print "$F[0]\t$F[4]\n" if $F[4] =~ /(\d+)%/ and $1 > 80'
⚡ 高级用法
1. 日志分析脚本
perl
#!/usr/bin/perl
use strict;
use warnings;
# 统计日志中的错误类型
my %errors;
while (<>) {
if (/ERROR.*?(\w+)/) {
$errors{$1}++;
}
}
print "错误统计:\n";
for (sort { $errors{$b} <=> $errors{$a} } keys %errors) {
print "$_: $errors{$_}\n";
}
2. 网络工具
perl
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
# 简单的 HTTP 客户端
my $ua = LWP::UserAgent->new;
my $response = $ua->get('http://example.com');
if ($response->is_success) {
print $response->decoded_content;
} else {
die $response->status_line;
}
3. 数据库操作
perl
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
# 连接数据库
my $dbh = DBI->connect("DBI:mysql:database=test", "user", "pass");
# 查询
my $sth = $dbh->prepare("SELECT * FROM users");
$sth->execute;
while (my $row = $sth->fetchrow_hashref) {
print "$row->{id}: $row->{name}\n";
}
$dbh->disconnect;
🎯 最佳实践
-
始终使用严格模式:
perluse strict; use warnings; -
检查文件操作:
perlopen my $fh, '<', $file or die "Cannot open $file: $!"; -
使用词法变量:
perlmy $variable; # 好 local $variable; # 特定场景 -
错误处理:
perleval { # 可能出错的代码 }; if ($@) { warn "错误: $@"; }
📊 常用模块
perl
use JSON; # JSON 处理
use XML::Simple; # XML 处理
use DBI; # 数据库接口
use LWP::UserAgent; # HTTP 客户端
use File::Find; # 文件查找
use Getopt::Long; # 命令行解析
use DateTime; # 日期时间
use Data::Dumper; # 调试输出
Perl 以其强大的文本处理能力和丰富的 CPAN 模块库,至今仍在系统管理、文本处理和快速原型开发中发挥着重要作用。