1

私のデータは次のようになります。

NC_004415 NC_010199 ([T(trnH ,trnS1 trnL1 ,)])
NC_006131 NC_010199 ([T(trnH ,trnS1 trnL1 ,)])
NC_006355 NC_007231 ([T(trnM ,trnQ ,)])

間のすべてをキャプチャしたい[]:

while( my $line = <crex> )

 {  $t=$line=~m/(\[.*\])/;

    print $t;
 }

の出力は$tです1。なぜ機能しないのですか?

4

3 に答える 3

3

$1キャプチャ グループを使用しているため、一致が成功した後に使用できます。

if($line =~ m/(\[.*\])/) {
    print $1;
}
于 2012-09-16T01:50:08.070 に答える
3

$line =~ m/(\[.*\])/リストコンテキストで一致のリストを返しますが、スカラーコンテキストで使用しています。スカラー コンテキストでは、match 演算子は、一致が成功したかどうかを示すブール値を返します。したがって、 を取得し1ます。使用できます

my ($t) = $line =~ m/(\[.*\])/;

を使用してリスト コンテキストを作成するか、$1代わりに を使用できます$t

于 2012-09-16T01:54:54.687 に答える
2

を括弧で囲みます$t:

($t) = $line =~m/(\[.*\])/;

perldoc perlretut (一致の抽出)を参照してください。

m//スカラー コンテキストで一致演算子 () を使用し、結果を に格納していると思います$t。一致が成功したため、m//1 を返します。perldoc perlopを参照してください。

于 2012-09-16T01:48:03.430 に答える