1

我正在尝试在 Perl 中创建一个程序,该程序将读取数千个字符并尝试找到匹配的字符串。我需要打印出字符串加上接下来的五个字母。我还需要打印出找到它的位置,即有多少个字母。我对 Perl 很陌生。我现在只是在课堂上学习它。

这是我到目前为止的代码:

#!/usr/bin/perl

$sequence = 'abcd';
$fileName = 'file.txt';

#Opening file
unless (open(fileName, $fileName)) {
    print "Cannot open file.";
    exit;
}
@tempArr = <fileName>;    #Adding the lines to an array
close fileName;           #closing the file
$characters = join('', @tempArr);    #making it a clean string
$characters =~ s/\s//g;               #removing white lines
if (characters =~ m/$sequence/i) {

    #Print $sequence and next five characters
}
else {
    print "Does not contain the sequence.";
}

exit;

file.txt 看起来像:

aajbkjklasjlksjadlasjdaljasdlkajs
aabasdajlakjdlasdjkalsdkjalsdkjds
askdjakldamwnemwnamsndjawekljadsa
abcassdadadfaasabsadfabcdhereeakj

我需要打印出“abcdheree”

4

1 回答 1

2

要打印$sequence& 后面的 5 个字符,请尝试使用:

if ($characters =~ m/$sequence.{5}/i) {
    print "$&\n";

(你忘了$characters

笔记

  • .表示任何字符
  • {5}是一个量词
  • 使用时open,请使用 3 个参数,例如:open my $fh, "<", "$file" or die $!;请参阅http://perldoc.perl.org/perlpentut.html
  • 始终放在use strict; use warnings;脚本的顶部
  • 不要忘记$变量(你错过了很多)
  • 用于my声明变量
  • 也许比制作一个大字符串更好的方法:您可以逐行处理数组,例如:foreach my $line (@tempArr) { #process $line }
  • @melTemp1您调用从未声明的数组

最后

#!/usr/bin/perl
use strict; use warnings;

my $sequence = 'abcd';
my $fileName = 'file.txt';

#Opening file
open my $fh, "<", $fileName or die "Cannot open file. [$!]";

my @tempArr = <$fh>;                    #Putting the file handle into an array
close $fileName;                        #closing the file handle

my $characters = join('', @tempArr);    #making it a big string
$characters =~ s/\s//g;                 #removing white spaces & tabs

if ($characters =~ m/$sequence.{5}/i) {
    print "$&\n";
}
else {
    print "Does not contain the sequence.";
}
于 2012-11-08T03:21:15.947 回答