以下は、逆にしてから置換しようとしているスクリプトです (A=>T、T=>A、G=>C、C=>G)。
バージョン 1
#!/usr/bin/perl
my $str="AAAAAGCTTGC";
$str_rev=scalar reverse ("$str"),"\n";
print"My original string: $str\n";
print "My reversed string: $str_rev\n";
$str_rev =~ s/A/T/g;
$str_rev =~ s/T/A/;
$str_rev =~ s/G/C/g;
$str_rev =~ s/C/G/;
print"My substituted reversed string: $str_rev\n";
出力:
My original string: AAAAAGCTTGC
My reversed string: CGTTCGAAAAA
My substituted reversed string: GCATCCTTTTT
すべての置換にグローバル (バージョン 2)
$str_rev =~ s/A/T/g;
$str_rev =~ s/T/A/g;
$str_rev =~ s/G/C/g;
$str_rev =~ s/C/G/g;
print"My substituted reversed string: $str_rev\n";
出力:
My original string: AAAAAGCTTGC
My reversed string: CGTTCGAAAAA
My substituted reversed string: GGAAGGAAAAA
最初のバージョンでは、グローバルではない置換が 1 回置換されていることがわかります (明らかに、グローバルではないため)。バージョン 2 では、コードを上から下に処理するため、最後の置換で残りの "G" がスキップされます。すべての置換を並行して行いたかったのです。どうすれば文字列でそれを達成できますか?