私のプログラムには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;
}
シェルから実行すると:sed.pl /Test/ ascii.txt
print if $_ =~ $script
が実行されないことがわかりました。これは、REGEX がスカラー変数に格納されているためです。
ascii.txtに含まれています。
Test 1
REGEX TEST
サブルーチンで使用するprint $script
と、ユーザーから送信された正規表現が出力されますsearch_print_lines