2

私がやろうとしているのは、ファイルを開いて1行ずつ読むことです。
正規表現が探しているものを見つけたら、それぞれを@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 ";
    }
}
4

2 に答える 2

4

1) 裸のファイルハンドルを使用しないでください:

open my $INFILE, '<', $fname
    or die "Couldn't open $fname: $!";

2) @マッチ?? g フラグを使用したので、@matches の方が適切な名前です。通常、配列名は複数形になります。

3) コードで $_ を使用しないでください。

for my $match (@matches) {
    print $match;
}

for と foreach は perl では同じものなので、for を使用してください。入力が短くなります。

4)

$start = '">';

二重引用符の後に > が続くものを探しますか?? あなたのコードは、このデータファイルでうまく機能します:

<option">hello world</option>

しかし、それは奇妙なデータです。

于 2013-04-20T04:46:05.157 に答える
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
于 2013-09-02T22:15:13.623 に答える