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