我的程序包含ascii.txt以匹配其中的模式。我的程序是实现sed
命令,只是为了尝试编写perl代码,因为我正在学习perl。
#!/usr/bin/perl
# sed command implementation
use strict;
use warnings;
use subs qw(read_STDIN read_FILE usage);
use IO::File;
use constant {
SEARCH_PRINT => 0,
};
our $proj_name = $0;
main(@ARGV);
sub main
{
if(scalar @_ == 2) {
read_FILE @_;
}
else {
usage
}
}
sub read_FILE {
my ($sed_script, $file_name) = @_;
my $parsed_val = parse_sed_script($sed_script);
if( $parsed_val == SEARCH_PRINT ) {
search_print_lines($sed_script, $file_name);
}
}
sub parse_sed_script {
my $command = shift or return;
if($command =~ /^\/([^\/].)*\/$/) {
return SEARCH_PRINT;
}
}
sub search_print_lines {
my ($script, $file) = @_;
my $fh = IO::File->new($file, "r") or error("no file found $file");
while( $_ = $fh->getline ) {
print if $_ =~ $script
}
}
sub usage {
message("Usage: $proj_name sed-script [file]")
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
当我从 shell 执行时:sed.pl /Test/ ascii.txt
我发现,print if $_ =~ $script
因为 REGEX 存储在标量变量中,所以不执行
ascii.txt包含。
Test 1
REGEX TEST
当我print $script
在search_print_lines
子程序中使用时,它会打印用户发送的正则表达式