有人可以解释这个小Perl脚本的作用吗?谢谢.
#!/usr/bin/perl
my ($file, $from, $to) = @ARGV;
my $fh;
my $matching = 0;
open($fh, $file) or die $!;
while(<$fh>)
{
if(/\Q$from\E/) { $matching = 1; }
if($matching) { print $_; }
if($matching && /\Q$to\E/) { last; }
}
close($fh);
Run Code Online (Sandbox Code Playgroud)
该脚本有三个参数:
并打印(包括)开始表达式(第二个参数)和结束表达式(第三个参数)之间的所有内容.如果您有一个包含以下内容的文件:
111
222
333
444
555
666
Run Code Online (Sandbox Code Playgroud)
./script.pl filename 333 555 将打印333,444和555.
my ($file, $from, $to) = @ARGV;
Run Code Online (Sandbox Code Playgroud)
此行将命令行参数分配给$file,$from和$to.这显示/提供了所需/不同的命令行参数.
my $fh;
my $matching = 0;
Run Code Online (Sandbox Code Playgroud)
这两行只是声明并初始化后面使用的两个变量.
open($fh, $file) or die $!;
Run Code Online (Sandbox Code Playgroud)
$fh如果无法打开文件,请尝试打开第一个传递的参数并将其分配给程序或退出程序.
while(<$fh>)
{
Run Code Online (Sandbox Code Playgroud)
这只是迭代文件内容
if(/\Q$from\E/) { $matching = 1; }
Run Code Online (Sandbox Code Playgroud)
的\Q和\E是正则表达式Perl的具体.这可以防止将特殊字符解释为正则表达式.如果当前行包含contains $from,$matching则设置为1.
if($matching) { print $_; }
Run Code Online (Sandbox Code Playgroud)
如果$matching设置,则打印当前行
if($matching && /\Q$to\E/) { last; }
Run Code Online (Sandbox Code Playgroud)
if $matching设置并且$to在当前行中,退出循环
}
close($fh);
Run Code Online (Sandbox Code Playgroud)
关闭文件
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |