perl正規表現が行をスキップする

私は正規表現の文字列をperlのデータファイルと照合しようとしていますが、私が目指している正確な行をスキップし続けます。何が間違っているのでしょうか?

私のファイルは言う:

<div class="definitionBox details" id="id-udt">
Udtale

[beˈgønˀə]

I’m going for the class “lydskrift” line, so I tried to grab its
content in multiple ways until I ended up trying to match just
everything like so:

while () {
    if (  =~ m/(.+)/ ) {
        open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
        print (FARA $1 . "n");
        close (FARA);
    }
}

Surprisingly it keeps giving me this:

<div class="definitionBox details" id="id-udt">


Interestingly enough, it matches all four lines if I put them in
a DATA area inside the same perl file! But that’s not what I want,
so what makes the difference here?

ベストアンサー

まず第一に、あなたのファイルには、あなたが含まれていない一番上の行がもう一つあると思います。私の疑惑の理由は以下の通りです。

Your problem isn’t the regex, your problem is that reads a line
each time you call it. So every run through your loop reads one
line in the while() and then another one in the
if( =~ m/(.+)/). Your if should be just
this:

if(m/(.+)/)

so that it uses the default $_ variable that the
while() will be populating.

さらに、あなたの while ループはそれよりもはるかに多くの作業をしています。

open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
while() {
    print FARA;
}
close (FARA);

またはこれも:

open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
print FARA while();
close (FARA);

あなたが空白行をスキップしようとしているなら、多分これは:

open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
while() {
        chomp;
        print FARA $_, "n" if($_);
}
close (FARA);

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です