1. ホーム
  2. スクリプト・コラム
  3. パール
  4. アプリケーションのヒント

perl変数$/の使用方法について説明します。コンテキストが行モードのとき、$/は行を区別するものを定義します。

2022-02-02 16:58:25
デフォルトでは、行を区別するために \n が使われることは明らかで、 \n は改行とも呼ばれます。
行単位で配列を読む場合は、改行文字を標準として使用します。
strawberry1.gbから読み込んだファイルは次のようになります。
LOCUS JX118024 460 bp DNA リニア PLN 25-SEP-2012
定義 Fragaria vesca subsp. americana RNAポリメラーゼβサブユニット(rpoC1)
遺伝子、部分 cds; プラスティド。
アクセッション jx118024
//
バージョン jx118024.1 gi:402238751
キーワーズ.
どのように
////
SOURCE plastid Fragaria vesca subsp.
最初の例:デフォルトの場合
コピーコード コードは以下の通りです。

#! /bin/perl
my $record =' ';
open (DNAFILENAME,'f:\\perl\\\strawberry1.gb')||die("can not open the file!");
$record = <DNAFILENAME>;
print $record;

これは何も変更しない場合、つまり1行ずつ読み込むデフォルトの状態で、以下のような結果になりました。
F:\>perlb.pl
LOCUS JX118024 460 bp DNA 直鎖状 PLN 25-SEP-2012
もし$/の値を変更する場合は、まず$/="///
コピーコード コードは以下の通りです。

#! /bin/perl
my $record =' ';
open (DNAFILENAME,'f:\\perl\\\strawberry1.gb')||die("can not open the file!");
$/="////\n";
$record = <DNAFILENAME>;
print $record;

以下のような結果が得られます。
F:\>perlb.pl
LOCUS JX118024 460 bp DNA 直鎖状 PLN 25-SEP-2012
定義 Fragaria vesca subsp. americana RNAポリメラーゼβサブユニット(rpoC1)
遺伝子、部分 cds; プラスティド。
アクセッション jx118024
//
バージョン jx118024.1 gi:402238751
キーワーズ.
どのように
////
ここでは、///で区切られ、///より上の部分全体が1行と見なされていることがわかります。
文字だけでなく、文字も区切り文字として使用することができます。
コピーコード コードは以下の通りです。

#! /bin/perl
my $record =' ';
open (DNAFILENAME,'f:\\perl\\\strawberry1.gb')||die("can not open the file!");
$/="how\n";
$record = <DNAFILENAME>;
print $record;

その結果は以下の通りです。
C:\Documents and SettingsAdministrator>f:perlb.pl
LOCUS JX118024 460 bp DNA 直鎖状 PLN 25-SEP-2012
定義 Fragaria vesca subsp. americana RNAポリメラーゼβサブユニット(rpoC1)
遺伝子、部分 cds; プラスティド。
アクセッション jx118024
//
バージョン jx118024.1 gi:402238751
キーワーズ.
どのように
C:\Documents and SettingsAdministrator>
同様に、従来の意味での行を完全に破棄することもできます。例えば、例の5行目のACCESSIONをセパレータとしましょう。
コピーコード コードは以下の通りです。

#! /bin/perl
my $record =' ';
open (DNAFILENAME,'f:\\perl\\\strawberry1.gb')||die("can not open the file!");
$/="ACCESSION";
$record = <DNAFILENAME>;
print $record;

その結果は以下の通りです。
F:\>perlb.pl
LOCUS JX118024 460 bp DNA 直鎖状 PLN 25-SEP-2012

定義 Fragaria vesca subsp. americana RNA polymerase beta subunit (rpoC1)
遺伝子、部分 cds; プラスティド。
ACCESSION
F:\
別の例として、セパレータに /n を使用した場合。
コピーコード コードは以下の通りです。

#! /bin/perl
my $record =' ';
open (DNAFILENAME,'f:\\perl\\\strawberry1.gb')||die("can not open the file!");
$/="/\n";
$record = <DNAFILENAME>;
print $record;

結果は4行目までが1行のコンテンツになると思われますが、そうでしょうか?
F:\>perlb.pl
LOCUS JX118024 460 bp DNA 直鎖状 PLN 25-SEP-2012
定義 Fragaria vesca subsp. americana RNAポリメラーゼβサブユニット(rpoC1)
遺伝子、部分 cds; プラスティド。
アクセッション jx118024
//
F:\
なぜ最初の/がマッチしないのですか?
実は、この/の行は単なる/ではなく、他の構成要素があるので、この行を完全に削除して、/だけを入力し直してみると、またマッチングします
F:\>perlb.pl
LOCUS JX118024 460 bp DNA 直鎖状 PLN 25-SEP-2012
定義 Fragaria vesca subsp. americana RNAポリメラーゼβサブユニット(rpoC1)
遺伝子、部分 cds; プラスティド。
F:\
今回はうまくいった