perl 變數 $/ 的用法解析 上下文為行模式時,$/ 定義以什麼來區分行_應用技巧

來源:互聯網
上載者:User
預設狀態下,很顯然都是用\n來區分行,\n也被我們稱作為分行符號。
當讀取序列時,按行來讀取時,就是以分行符號為標準。

讀取的strawberry1.gb的檔案內容如下:
LOCUS JX118024 460 bp DNA linear PLN 25-SEP-2012
DEFINITION Fragaria vesca subsp. americana RNA polymerase beta subunit (rpoC1)
gene, partial cds; plastid.
/
ACCESSION JX118024
//
VERSION JX118024.1 GI:402238751
KEYWORDS .
how
///
SOURCE plastid Fragaria vesca subsp. americana

第一個例子:預設情況
複製代碼 代碼如下:

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


這個就是沒有任何的改動的情況,也就是預設的每次讀取一行,結果如下:
F:\>perl\b.pl
LOCUS JX118024 460 bp DNA linear PLN 25-SEP-2012

如果我們對$/的值給改變一下,按照我們檔案的特徵,我們先改動為$/=“///\n;

複製代碼 代碼如下:

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


我們得到的結果如下:
F:\>perl\b.pl
LOCUS JX118024 460 bp DNA linear PLN 25-SEP-2012
DEFINITION Fragaria vesca subsp. americana RNA polymerase beta subunit (rpoC1)
gene, partial cds; plastid.
/
ACCESSION JX118024
//
VERSION JX118024.1 GI:402238751
KEYWORDS .
how
///

我們可以看到在這裡,這一行是以///為分隔字元的,///以上的整個部分都被看成一行。

同樣不僅是字元可以作為分隔字元,字母也可以,加入我們以how為分隔字元,$/="how\n";

複製代碼 代碼如下:

#!/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 Settings\Administrator>f:perl\b.pl
LOCUS JX118024 460 bp DNA linear PLN 25-SEP-2012
DEFINITION Fragaria vesca subsp. americana RNA polymerase beta subunit (rpoC1)
gene, partial cds; plastid.
/
ACCESSION JX118024
//
VERSION JX118024.1 GI:402238751
KEYWORDS .
how

C:\Documents and Settings\Administrator>

同樣我們也可以完全拋棄傳統意義上的行,例如,我們以例子中的第五行的ACCESSION為分隔字元:

複製代碼 代碼如下:

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


結果如下:
F:\>perl\b.pl
LOCUS JX118024 460 bp DNA linear PLN 25-SEP-2012
DEFINITION Fragaria vesca subsp. americana RNA polymerase beta subunit (rpoC1)
gene, partial cds; plastid.
/
ACCESSION
F:\>

再來看一個例子:以/\n為分隔字元:

複製代碼 代碼如下:

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


我們期望的結果應該是配匹到第四行以前的內容為一行,但是結果是否如此?
F:\>perl\b.pl
LOCUS JX118024 460 bp DNA linear PLN 25-SEP-2012
DEFINITION Fragaria vesca subsp. americana RNA polymerase beta subunit (rpoC1)
gene, partial cds; plastid.
/
ACCESSION JX118024
//

F:\>

為什麼沒有匹配到第一個/ 呢?

其實這裡/這一行並不是僅僅有一個/,而是還有其他的成分在這裡,我們把這一行完全刪除,然後重新只輸入一個/,我們再來匹配
F:\>perl\b.pl
LOCUS JX118024 460 bp DNA linear PLN 25-SEP-2012
DEFINITION Fragaria vesca subsp. americana RNA polymerase beta subunit (rpoC1)
gene, partial cds; plastid.
/

F:\>
這次就得到正確的結果了。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.