我要做的是打开一个文件并逐行阅读
一旦我找到了我的正则表达式所寻找的内容,我想将每个人放入@accounts
数组中,并将它们打印到我的屏幕上。
虽然我没有得到任何结果。 我必须在这里犯一个简单的错误吗?
#!/usr/bin/perl
use strict;
use warnings;
my $line;
my $file;
my $start;
my $end;
my @match;
my @accounts;
print "Enter the file name (example: file.txt): ";
chomp ($file = <STDIN>);
open FILE, $file or die "Cannot open $file read :$!";
while ($line=<FILE>) {
$start = '">';
$end = '</option>';
@match = ($line =~ /$start(.*?)$end/g);
foreach (@match)
{
push @accounts, $_;
print " $_\n ";
}
}
答案 0 :(得分:4)
1)不要使用bareword文件句柄:
open my $INFILE, '<', $fname
or die "Couldn't open $fname: $!";
2)@match ??你使用了g标志,所以@matches会是一个更好的名字。通常,数组名称将是复数。
3)避免在代码中使用$ _:
for my $match (@matches) {
print $match;
}
for和foreach在perl中是相同的,所以使用 - 键入的时间更短。
4)
$ start ='“&gt;';
您确定要查找双引号后跟&gt; ??使用此数据文件,您的代码可以正常使用:
<option">hello world</option>
然而,这是一些奇怪的数据。
答案 1 :(得分:0)
use feature ":5.16";
use warnings FATAL => qw(all);
use strict;
my $t = "aaaa\">AAAA</option>\n bbbb\">BBBB</option> cccc\">CCCC</option>";
my $start = '">';
my $end = '</option>';
say for $t =~ /$start(.*?)$end/g;
产地:
AAAA
BBBB
CCCC