私は、Getopsを使ってユーザーの入力を受け取り、それに基づいて、ある種のテキストとパターンをマッチさせるか、一致するものをテキストに置き換えようと試みます。Perl qr //と代入
私が抱えている問題は、代用部分を動作させることができないということです。私は、マニュアルページのqr //エントリを見ています:http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operatorsしかし、私はそれに幸運を持っていないよ。私はこの場合、ドキュメントとまったく同じように自分のコードをモデル化しようとしました。私はマッチパターンをコンパイルし、それを置換に置き換えます。
誰かが間違っていると指摘できますか?
ここは、私が見てんだよ(これは個人的な使用のための唯一の小さなスクリプトで、あまりセキュリティを心配しないでください):「私は-rでそれを実行すると
if($options{r}){
my $pattern = $options{r};
print "\nEnter Replacement text: ";
my $rep_text = <STDIN>;
#variable grab, add flags to pattern if they exist.
$pattern .= 'g' if $options{g};
$pattern .= 'i' if $options{i};
$pattern .= 's' if $options{s};
#compile that stuff
my $compd_pattern = qr"$pattern" or die [email protected];
print $compd_pattern; #debugging
print "Please enter the text you wish to run the pattern on: ";
my $text = <STDIN>;
chomp $text;
#do work and display
if($text =~ s/$compd_pattern/$rep_text/){ #if the text matched or whatever
print $text;
}
else{
print "$compd_pattern on \n\t{$text} Failed. ";
}
} #end R FLAG
/マット/ "-i、そして置換テキスト 'matthew'をテキスト 'matt'に入力すると失敗します。どうしてこれなの?
EDIT:答えの男性のための
ありがとう!それは本当にとても役に立ちました。私はあなたの提案の両方を問題の解決策に結びつけました。私は/ gフラグを少し違って扱わなければなりません。ここでは、作業サンプルは次のとおりです。
if($options{r}){
my $pattern = $options{r};
print "\nEnter Replacement text: ";
my $rep_text = <STDIN>;
chomp $rep_text;
#variable grab, add flags to pattern if they exist.
my $pattern_flags .= 'i' if $options{i};
$pattern_flags .= 's' if $options{s};
print "Please enter the text you wish to run the pattern on: ";
my $text = <STDIN>;
chomp $text;
#do work and display
if($options{g}){
if($text =~ s/(?$pattern_flags:$pattern)/$rep_text/g){ #if the text matched or whatever (with the g flag)
print $text;
}
else{
print "$pattern on \n\t{$text} Failed. ";
}
}
else{
if($text =~ s/(?$pattern_flags:$pattern)/$rep_text/){ #if the text matched or whatever
print $text;
}
else{
print "$pattern on \n\t{$text} Failed. ";
}
}
} #end R FLAG
'(と非常に良いああ、 ?opts:pat) 'を実行します。私はいつもあなたがそれをすることができることを忘れる。 – chaos