生信~一天學會Perl塘匣,你相信嗎?

劉小澤開始寫于19.7.31
寫這個是因為看到龍星教程使用了大量的perl腳本巷帝,動輒4忌卤、5千行,例如https://github.com/WGLab/PennCNV/blob/master/filter_cnv.pl
題目不是我取的锅睛,我也不知道學不學的會埠巨,但總要試試历谍,教程在:Perl Tutorial for Beginners: Learn in 1 Day https://www.guru99.com/perl-tutorials.html

前言

  • 語言不介紹现拒,安裝不多說,用perl -v檢查版本

  • 寫腳本或看別人腳本時首先要注意的就是:#!/usr/bin/perl這行代碼望侈,指定了解釋器的路徑印蔬,并以#!開頭,當然有些IDEs不需要指定脱衙。另外可以在這行的末尾加上-w表示全局顯示warning信息

  • 真正寫代碼時侥猬,一句完整的代碼要以;結(jié)尾例驹,例如:print "Hello World"; 引號是操作的字符串

  • 關(guān)于執(zhí)行perl腳本:

    • Windows:C:\> perl path\firstprog.plC:\> c:\perl\bin\perl.exe firstprog.pl
    • Linux或Unix:perl firstprog.pl 如果保錯找不到這個腳本,就先賦予執(zhí)行權(quán)限:chmod +x firstprog.pl 退唠,然后./firstprog
  • 安裝CPAN(Comprehensive Perl Archive Network)模塊:

    • 什么是模塊或者說是module鹃锈?Modules are set of codes that are used to do tasks that perform common operations in several programs. You do not have to rewrite the codes to perform that same operation.就是別人做好的直接拿來用的函數(shù)們,很像R包瞧预、Python庫

    • 大多數(shù)Perl模塊用Perl寫的屎债,也有用C語言編寫,這樣的模塊需要調(diào)用C語言編譯器垢油。而且模塊之間是相互依賴的盆驹,安裝時需要注意這種關(guān)聯(lián)

    • 建議使用cpanminus來獲取、解壓滩愁、安裝模塊(https://metacpan.org/release/App-cpanminus/) 利用cpan App::cpanminus (當然首先要確保自己系統(tǒng)有cpan這個東西)躯喇,然后可以安裝其他的模塊:cpan –i <Module_Name>际插,例如安裝File::Data這個模塊就用:cpan -i File::Data

    • (測試)如果發(fā)現(xiàn)自己服務器賬號上沒有cpan碌秸,可以到某個路徑下尋找,例如

      # 運行perl腳本經(jīng)常會報錯弄兜,顯示沒有某個模塊妻味,因為有時腳本會調(diào)用(require xxx.pm)
      # 比如我缺少khmm.pm這個模塊雅倒,當前用戶又沒有,只能調(diào)用公共路徑下的弧可,然后安裝到自己路徑(local::lib蔑匣,也是默認選項)
      /shared/Perl/bin/cpan -i khmm.pm
      

Perl 變量

什么是變量?

可以將變量想象成一類容器棕诵,能存儲一個或多個值裁良。一旦指定了值,那么這個變量的類型也就確定了校套,但是其中的值是可以不斷改變的

三類變量:

標量(scalar)
  • 存儲一個值价脾,用$variable_name表示

  • 變量都有命名規(guī)則,關(guān)于標量命名有三個注意事項

    • 所有標量都以$開頭

    • 然后可以接字母或者數(shù)字笛匙,可以用a to z, A to Z and 0 to 9 侨把,下劃線也可以,只不過不能以數(shù)字開頭

    • 數(shù)字可以作為名稱的一部分妹孙,但是開頭還是要用字母或下劃線
      例如:

      $var;
      $Var32;
      $vaRRR43;
      $name_underscore_23;
      
  • 標量又分為兩種類型:數(shù)字和字符串

    • 數(shù)字:整數(shù)(如:2秋柄、0)、浮點數(shù)(如:3.14蠢正、6.35)骇笔。perl對待整數(shù)也是首先當成浮點數(shù)進行理解,例如它會將2理解成2.0000。對于長度較長的數(shù)字笨触,也可以用下劃線分隔懦傍,如:4865415484645 = 4_865_415_484_645

    • 字符串:perl中字符串的長度取決于內(nèi)存大小,當然最短的字符串也可以是空字符串芦劣。有兩種表示方法:單引號字符串和雙引號字符串粗俱。
      單引號可以理解為強引用,舉個例子:

      #!/usr/bin/perl 
      $num = 7;
      $txt = 'it is $num';
      print $txt;
      # 結(jié)果:it is $num
      # 看到它不會將變量$num輸出
      

      雙引號就可以虚吟,它可以調(diào)用標量和數(shù)組源梭,但是不能直接用在哈希身上(不過可以調(diào)用哈希的切片)。最簡答的例如:

      $num = 7; 
      $txt = "it is $num"; 
      print $txt;
      # it is 7
      

      特殊的:如\n 就是換行符稍味,還有很多:

      字符串的連接:利用. 废麻,例如:

      #!/usr/bin/perl
      $a = "Tom is";
      $b = "favorite cat";
      $c = $a ." mother's ". $b;
      print $c;
      # Tom is mother's favorite cat
      
      # 當然,如果要連接的字符串中需要包含引號模庐、反斜線等特殊字符烛愧,就需要先將這個字符串用反引號轉(zhuǎn)義,例如:$a = "Tom is\""掂碱,結(jié)果就會輸出
      # Tom is" mother's favorite cat
      

      關(guān)于數(shù)字和字符串聯(lián)合運算:結(jié)果取決于使用什么運算符號(之后介紹)怜姿,例如:

      $string = "43";
      $number = 28;
      $result = $string + $number;
      print $result;
      # 71(將字符轉(zhuǎn)為了數(shù)字) 
      
  • 如果想要在腳本任何位置調(diào)用標量變量,就需要用到Access modifier 疼燥,主要有3種類型

    • my :這個調(diào)用只在一個小范圍(block)中有效沧卢,例如在一個大括號中

      #!/usr/bin/perl 
      my $var=5;
      if(1)
      { 
      my $var_2 =$var;
      }
      print $var_2;
      # 這樣是沒有返回結(jié)果的
      # 解讀:可以看到,一共定義了兩個變量醉者,一個在block內(nèi)部(var_2)但狭,一個在外部(var)。內(nèi)部運算的var_2是不能在大括號外訪問的撬即。如果將最后一行改成print $var;就會返回結(jié)果 
      
    • local:假定之前有一個變量被定義立磁,我們可以用local在小范圍內(nèi)覆蓋原來的變量,賦予一個新的值剥槐,但不改變原來的變量唱歧。例如:

      #!/usr/bin/perl
      $var = 5;
      {
      local $var = 3;
      print "local,\$var = $var \n";
      }
      print "global,\$var = $var \n";
      
      # local, $var = 3
      # global, $var = 5
      
    • our:覆蓋范圍最大的變量調(diào)用符號

數(shù)組(Array)
  • 以列表的形式存儲數(shù)據(jù),然后其中的每個元素都有一個唯一的index粒竖,可以用來訪問颅崩。它可以包含數(shù)字、字符串等等蕊苗,利用@來創(chuàng)建數(shù)組沿后,例如my @array;

  • 關(guān)于存儲數(shù)據(jù),舉個例子:

    my @array=(a,b,c,d);
    print @array;
    # abcd
    

    還有一種方法:利用qw()岁歉,它的意思是quote word得运,利用空格作為分隔符:

    @array1=qw/a b c d/;
    @array2= qw' p q r s'; 
    @array3=qw { v x y z};
    print @array1;
    print @array2;
    print @array3;
    # abcdpqrsvxyz
    
  • 需要注意的是:數(shù)組是從0開始計數(shù)的


    如果要在數(shù)組中添加某個元素,可以用:$array [4] ='e'; 這樣就在第5個位置添加了字母e

  • 順序數(shù)組(Sequential Array):有點像R中用seq()生成的結(jié)果锅移,例如:

    @numbers= (1..10);
    print @numbers; 
    # 12345678910
    
  • 檢查數(shù)組的大腥鄄簟:兩種方法

    @array= qw/a b c d e/;
    print $size=scalar (@array); # 第一種用scalar
    print "\n";
    print $size=$#array + 1; # 第二種用$#array,它會返回最大的index非剃,但是注意perl是0-based置逻,因此總長度要+1                      
    

    好,以上都是靜態(tài)數(shù)組备绽,那么還有一種常用的叫"動態(tài)數(shù)組"券坞,簡單理解就是利用循環(huán)構(gòu)建的數(shù)組

  • 動態(tài)數(shù)組?舉個例子:

    my $string="This is a kind of dynamic array";
    my @array;
    @array=split('a',$string);
    foreach(@array)
    {
    print "$_ \n”;
    # $_這個特殊變量肺素,存儲了當前行的內(nèi)容
    }
    
    # 結(jié)果會按照a進行字符串的分隔恨锚,產(chǎn)生:
    This is
    
    kind of dyn
    
    mic
    
    rr
    
    y
    
  • 數(shù)組的元素添加/刪除:push、pop倍靡、shift猴伶、unshift


    • push:結(jié)尾添加
    • pop:結(jié)尾移除
    • shift:開頭移除
    • unshift:開頭添加
哈希(Hashes)
  • 為啥用哈希?
    回顧一下塌西,標量變量存儲整數(shù)他挎、字符串;數(shù)組存儲一系列標量變量捡需,然后可以利用index來調(diào)用办桨,但是這就衍生了一個問題,如果有成百上千個元素呢站辉,怎么訪問呢撞?我們還要記住每個元素的index嗎?因此哈希派上了用場

  • 理論上饰剥,哈侠晗啵可以存儲足夠多的標量變量,它和數(shù)組不同之處在于:它不用index調(diào)用捐川,而是用的鍵值對(key-value)脓鹃,就像Python的字典一樣,存儲足夠多的古沥,用到什么查什么瘸右。哈希是用%調(diào)用的,舉個例子:

    @array=('Sainath',23,'Krishna',24,'Shruthi',25);        
    print @array;
    # Sainath33Krishna24Shruthi25
    

    它的經(jīng)典調(diào)用方式是這樣的岩齿,圖中底部文字也顯示了如何調(diào)用其中的值太颤,也就是說,如果想知道某個人的年齡盹沈,只需要知道他的名字:print $hash{'Krishna'}; 龄章,其中的$就代表每個哈希元素

  • 需要注意的是:哈希中的每個鍵(key)都應該是唯一的吃谣,否則它會覆蓋原來的值。如何將一個哈希賦值給原來的哈希做裙?

    %hash=( 'Tom' => 23);
    %newHash=%hash; 
    print %newHash;
    # Tom23
    
  • 如何在哈希中添加鍵值對岗憋?

    $newHash{'Jim'}=25;
    $newHash{'John'}=26;
    $newHash{'Harry'}=27;
    print %newHash;
    # Jim25John26Harry27
    

    如何刪除?

    delete $newHash{'Jim'};
    # 這個delete是一個perl的內(nèi)置函數(shù)
    

    另外我們可以單獨提取鍵或值:

    # 利用keys函數(shù)或者values函數(shù)
    @arraykeys= keys(%newHash);
    @arrayvalues=values(%newHash);
    print "@arraykeys\n";
    print "@arrayvalues\n"; 
    

    如果再狠一點锚贱,刪除整個哈希仔戈,就可以重置它:%newHash=();


Perl的條件使用

和大多數(shù)其他語言一樣,都會涉及不同的條件語法

if條件

my $a=5;
if($a==5)
{
   print "The value is $a";
}
# 輸出5

if else條件

就是加多一個限制條件

my $a=10;
if($a==5)
{
    print "The values is $a ---PASS";
}
else
{
    print "The value is $a ---FAIL";
}
# 結(jié)果 The value is 10 ---FAIL

elseif條件

my $a=5;
if($a==6)
{
    print "Executed If block -- The value is $a";
}
elsif($a==5)
{
    print "Executed elsif block --The value is $a";
}
else
{
    print "Executed else block – The value is $a";
}

if嵌套

my $a=11;
if($a<10){
  print "Inside 1st if block";
        if($a<5){
                print "Inside 2nd if block --- The value is $a";
        }
        else{
                print " Inside 2nd else block --- The value is $a";
        }
    }
    else{
            print "Inside 1st else block – The value is $a";
    }
# Inside 1st else block – The value is 11

unless

它和if的意思是相反的拧廊,只有當它包含的條件為假時监徘,才會執(zhí)行它的命令(可以和if對照理解);如果滿足unless的條件吧碾,那么就會執(zhí)行它的else命令

my $a=5;
unless($a==5)
{
   print "Inside the unless block --- The value is $a";
}
else
{
   print "Inside else block--- The value is $a";
}
# 結(jié)果是:Inside else block--- The value is 5

Perl循環(huán)使用

主要是四種:for, foreach, while and until

for循環(huán)

當條件滿足時執(zhí)行凰盔,例如:

my @array=(1..10);
for(my $count=0;$count<10;$count++)
{
    print "The array index $count value is $array[$count]";
    print "\n";
}
# 這個結(jié)果會返回類似"The array index 0 value is 1"的10條結(jié)果

for的第二種用法

for(1..10)
{
    print "$_ n";
    print "\n";
}
# 結(jié)果會輸出1n、2n等倦春,且都是間隔一行

foreach

它就是在for的基礎上增加遞歸廊蜒,不用手動設定

my @array=(1..10);
foreach my $value (@array)
{  
    print " The value is $value\n";
}
# 先定義一個數(shù)組,然后將數(shù)組放入foreach循環(huán)溅漾,每次循環(huán)賦值給value

# 另一種展現(xiàn)方式:利用$_(更常用一點)
my @array=(1..10);
foreach(@array)
{
    print " The value is $_ \n"; 
}

上面是對數(shù)組進行foreach操作山叮,那么對哈希呢?

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $key (keys %hash)
{
print "$key \n";
}

#參考上面數(shù)組的第二種添履,我們對哈希也能寫出
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach(keys(%hash))
{
print "$_ \n";
}
# 依次類推屁倔,對value也可以調(diào)用

while

只有當滿足while的條件時才進行循環(huán),不滿足就跳出暮胧。例如:猜數(shù)字的小程序

#!/usr/bin/perl
$guru99 = 0;
$luckynum = 7;
print "Guess a Number Between 1 and 10\n";
$guru99 = <STDIN>;
while ($guru99 != $luckynum)
{
    print "Guess a Number Between 1 and 10 \n ";
    $guru99 = <STDIN>;
}
print "You guessed the lucky number 7"
# <STDIN>就是鍵盤輸入的數(shù)字锐借,如果不等于提前設定的$luckynum=7時,就循環(huán)往衷,讓你一遍一遍輸入钞翔,只有輸入為7時,才輸出恭喜信息

do while循環(huán)

要把do和while當成一個整體席舍,語法結(jié)構(gòu)是:

$guru99 = 10;
 do {
 print "$guru99 \n";
 $guru99--;
 } 
 while ($guru99 >= 1);
 print "Now value is less than 1";
 # 意思是從10遞減1布轿,一直減到1,當?shù)扔?時還是滿足while條件的来颤,那么繼續(xù)傳給do循環(huán)汰扭,再減1為0。此時不再滿足while條件福铅,于是跳出循環(huán)萝毛,輸出結(jié)果

until循環(huán)

和條件控制的unless很像,當其中的條件為假時才跳出輸出

大體語法如下:

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 until($name ne 'sai')
 {
    print "Enter any name \n";
    $name=<STDIN>;
    chomp($name);
 }
 # 只有當until($name ne 'sai')中的條件$name ne 'sai'為假滑黔,也就是$name=sai時才會結(jié)束

這個<STDIN> 要注意一下:它用作非文件的標準輸入笆包,例如管道傳輸?shù)臄?shù)據(jù)环揽、重定向的數(shù)據(jù)或者鍵盤輸入。而且它的輸入會自帶換行符庵佣,因此print不需要加額外的換行符歉胶。(讀取文件內(nèi)容用<> )還有chmop 是去掉行尾換行符的意思

Perl運算符(Operator)

Perl整合了C語言的許多運算符,相對于其他語言運算符的數(shù)量更多秧了。主要包括:數(shù)學運算跨扮、賦值序无、邏輯關(guān)系符號

  • 數(shù)學運算:主要注意++验毡、-- 為每次加/減1,例如:$x++;++$x;都可以

  • 賦值運算:類似+=帝嗡、-= 這樣晶通,例如:$x=4; $x+=10 結(jié)果就是14

  • 邏輯關(guān)系(兩種表示方法):==/eq!=/ne哟玷、>/gt 狮辽、||&&

Perl特殊變量

特殊之處就在于:有的變量提前定義好了巢寡,然后長得比較奇怪喉脖,但是用起來很方便。大部分的特殊變量都是標量變量

  • 特殊的標量變量:(很重要抑月!大多時候看不懂別人的代碼就是因為看不懂這些代表什么意思)

    舉幾個例子:更多可以參考:https://www.cnblogs.com/ace9/archive/2011/04/29/2032755.html

    $_ 存儲當前的變量值
    $0 存儲perl腳本的名稱
    $\ 定義輸出分隔符
    $. 讀取的當前行號
    $<digit> 例如$1, $2, $3 … :存儲匹配得到的第1树叽、2、3...個值
    

Perl正則表達式

字符串匹配是perl強大的一個原因谦絮,雖然現(xiàn)在perl在一點點被遺忘题诵,但是很多好用的腳本還是在流傳。好的東西不會被淡忘~

perl 比對用m//层皱,替換用s///

先復習一下表達式
\   表示特殊字符或引用
* 0或多
+ 1或多
性锭?0或1
| 可選的匹配模式
() 存儲匹配模式
關(guān)于匹配(match)舉個例子:
my $userinput="Guru99 Rocks";
if($userinput=~m/.*(Guru99).*/)
{
    print "Found Pattern";
}
else
{
    print "unable to find the pattern";
}
# Found Pattern

# 當然 =~ 可以替換成 !~  表示不匹配
關(guān)于替換(Substitution)舉個例子:
my $a="Hello how are you";
$a=~s/hello/cello/gi;
print $a;
# 結(jié)果是:cello how are you
# 注意:g-globally, i-ignore case

Perl文件操作I/O

一個概念:文件句柄(FILEHANDLE,簡稱FH叫胖,可以理解成文件的代稱) 草冈,當打開文件進行讀或?qū)憰r使用

打開文件

利用open()函數(shù):open(FILEHANDLE, "文件名或文件絕對路徑");

既然打開了文件,那么接下來是要讀還是要寫瓮增? 具體操作像極了Linux

讀 – open(my $fh,"<文件名或文件絕對路徑"); 
寫 – open(my $fh,">文件名或文件絕對路徑");
追加 – open(my $fh,">>文件名或文件絕對路徑");
練習讀文件
open(FH,"<file.txt"); 
while(<FH>)   #對讀入的每行執(zhí)行一個循環(huán)操作
{
    print "$_";
}
close FH;
練習寫文件
open(FH,">test.txt");
my $var=<>;
print FH $var;
close FH;
練習追加文件
open(FH,">>test.txt");
my $var=<>;
print FH $var;
close FH;
對文件夾處理
# 實現(xiàn)輸出文件夾下的所有文件名
opendir(DIR,"C:\\Program Files\\"); # DIR是一個文件句柄

while(readdir(DIR)) # readdir是內(nèi)置函數(shù)
{
   print "$_\n";
}
closedir(DIR); # 結(jié)束后要關(guān)閉文件句柄

Perl子函數(shù)

它和內(nèi)置的perl函數(shù)(print疲陕、chmop等)差不多,只不過是我們自己在代碼中定義的钉赁,確保了函數(shù)復用

一般格式:
sub subroutine_name 
{
    Statements…;    
}

知道了怎么定義一個子函數(shù)蹄殃,那么如何調(diào)用它呢?
在子函數(shù)前面加上一個& 就可以實現(xiàn)你踩,例如:

sub hash
{
my %hash=@_;
print %hash;
}
%value= ( 1=>'a', 2=>'b');
&hash(%value);
# 定義了一個叫hash的子函數(shù)诅岩,內(nèi)容就是存儲+輸出讳苦。然后我們調(diào)用它就用的&hash
將參數(shù)傳遞給子函數(shù)
sub add
{
my $a=shift;
my $b=shift;
return($a+$b);
}
my $result=add(5,6);
print $result;
# 結(jié)果是11

Perl腳本標準

  • 一般建議加上strictwarnings 這兩個模塊,前者讓代碼更清晰吩谦,后者使代碼少報錯
  • 經(jīng)常使用反饋性的代碼鸳谜,例如打開文件時,如何檢查文件能否正確打開:open(FH, <file.txt") or die("cannot open the file $!");

比較標準的格式:

#######################################################################
Program to read the file content
# Date: 22-2-2013
# Author : Guru99
########################################################################
#!/usr/bin/perl 
use strict;
use warnings; 
my $line;
open FR, "file.txt" || die("Cannot open the file $!");
while ($line=<FR>) 
{   
    print $line;
} # Looping file handler to print data

Perl模塊

什么是模塊式廷?Module is a collection of reusable code, where we write subroutines in it.

標準的模塊在perl安裝時一起被裝好了咐扭,有一些自定義的需要下載使用,一般以.pm結(jié)尾滑废,用require調(diào)用


我的總結(jié)

這個題目應該是不假的蝗肪,我自己看了6個多小時。理論上一天差不多可以理解性地看一遍perl基礎蠕趁,但是不要妄想看完這個就可以看別人寫的腳本了薛闪,那中間還隔著自己練習、代碼出錯的一大步

學習感受
這次的學習感覺出知識迭代了俺陋。如果你之前沒有接觸過豁延,可能真的需要一整天的時間來入門;如果之前零零散散接觸過一些腊状,再看一遍印象會增加一些


歡迎關(guān)注我們的公眾號~_~  
我們是兩個農(nóng)轉(zhuǎn)生信的小碩诱咏,打造生信星球,想讓它成為一個不拽術(shù)語缴挖、通俗易懂的生信知識平臺袋狞。需要幫助或提出意見請后臺留言或發(fā)送郵件到jieandze1314@gmail.com

Welcome to our bioinfoplanet!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市醇疼,隨后出現(xiàn)的幾起案子硕并,更是在濱河造成了極大的恐慌,老刑警劉巖秧荆,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倔毙,死亡現(xiàn)場離奇詭異,居然都是意外死亡乙濒,警方通過查閱死者的電腦和手機陕赃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颁股,“玉大人么库,你說我怎么就攤上這事「视校” “怎么了诉儒?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亏掀。 經(jīng)常有香客問我忱反,道長泛释,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任温算,我火速辦了婚禮怜校,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘注竿。我一直安慰自己茄茁,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布巩割。 她就那樣靜靜地躺著裙顽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喂分。 梳的紋絲不亂的頭發(fā)上锦庸,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天机蔗,我揣著相機與錄音蒲祈,去河邊找鬼。 笑死萝嘁,一個胖子當著我的面吹牛梆掸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牙言,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼酸钦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咱枉?” 一聲冷哼從身側(cè)響起卑硫,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚕断,沒想到半個月后欢伏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡亿乳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年硝拧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葛假。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡障陶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出聊训,到底是詐尸還是另有隱情抱究,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布带斑,位于F島的核電站鼓寺,受9級特大地震影響酿雪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侄刽,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一指黎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧州丹,春花似錦醋安、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至所计,卻和暖如春柠辞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背主胧。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工叭首, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踪栋。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓焙格,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夷都。 傳聞我的和親對象是個殘疾皇子眷唉,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Perl 哲學 Perl 是一種能“干實事”的語言。它靈活囤官、寬容冬阳、可塑。在一名編程能者的手中党饮,它可以 完成幾乎所有...
    firefive閱讀 1,357評論 1 11
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔肝陪,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,732評論 2 9
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,776評論 1 10
  • 2009 有用的和有意思的循環(huán) 讓我們來看一個基本的例子. 這是一個最簡單清晰的語法的例子.在這并沒有使用括號來包...
    焉知非魚閱讀 536評論 0 0
  • 文/天尺 “喂劫谅,五一不回家了么见坑?成天在外面跑不花錢么?你看你小林姐姐都抱孫子了捏检!你再看你一天還不懂事……”電話那頭...
    彭卜滅閱讀 710評論 6 11