2

配列内にあるものを除いて、テキストからすべての単語を置き換えようとしています。これが私のコードです:

my $text = "This is a text!And that's some-more text,text!";
while ($text =~ m/([\w']+)/g) {

    next if $1 ~~ @ignore_words;

    my $search  = $1;
    my $replace = uc $search;
    $text =~ s/$search/$replace/e;
}

ただし、プログラムは動作しません。基本的に私はすべての単語を大文字にしようとしていますが、@ignore_wordsの単語はスキップします。正規表現で使用されている変数に問題があることはわかっていますが、問題を理解することはできません。

4

2 に答える 2

1
#!/usr/bin/perl

my $text = "This is a text!And that's some-more text,text!";

my @ignorearr=qw(is some);

my %h1=map{$_ => 1}@ignorearr;
$text=~s/([\w']+)/($h1{$1})?$1:uc($1)/ge;

print $text;

これを実行すると、

THIS is A TEXT!AND THAT'S some-MORE TEXT,TEXT!
于 2012-10-26T13:54:59.153 に答える
0

whileループの同じ制御変数に式を適用する代わりに、s/../../egグローバルに実行させれば、コードから問題を理解できます。

my $text = "This is a text!And that's some-more text,text!";

my @ignore_words = qw{ is more };

$text =~ s/([\w']+)/$1 ~~ @ignore_words ? $1 : uc($1)/eg;

print $text;

そして実行時に:

THIS is A TEXT!AND THAT'S SOME-more TEXT,TEXT!
于 2012-10-27T16:39:54.687 に答える