2012-07-21 158 views
-3

我有點noobish到perl編碼規範,能不能有人幫忙解釋一下:這些Perl變量是什麼意思?

  • 爲什麼在Perl的變量的前//<
  • \==~是什麼意思,有什麼區別?
  • 爲什麼代碼在;之前需要結束/,例如, /start=\'([0-9]+)\'/

前3個子問題是由perldocs解決的,但下面的代碼是什麼意思?

push(@{$Start{$start}},$features);

據我所知,我們正在推進的$功能集成到一個數組@啓動,但什麼@$Start{$start}是什麼意思?它是一樣的: @Start = ($start);

中的代碼有這樣的事情:

use FileHandle; 

sub open_infile { 
    my $file = shift; 
    my $in = FileHandle->new($file,"<:encoding(UTF-8)") 
     or die "ERROR: cannot open $file: $!\n" if ($Opt_utf8); 
    $in = new FileHandle("$file") 
     or die "ERROR: cannot open $file: $!\n" if (!$Opt_utf8); 
    return $in; 
} 

$uamf = shift @ARGV; 
$uamin = open_infile($uamf); 


while (<$uamin>) { 
    chomp; 
    if(/<segment /){ 
     /start=\'([0-9]+)\'/; 
     /end=\'([0-9]+)\'/; 
     /features=\'([^\']+)\'/; 
     $features =~ s/annotation;//; 

    push(@{$Start{$start}},$features); 
    push(@{$End{$end}},$features); 
    } 
} 

EDITED

所以後perl的文檔的一些精讀,這裏的有些事情我」 ve gotten

  • /<segment /是一個正則表達式che cks while (<$uamin>)的readline 是否包含以下字符串:<segment
  • 同樣的/start=\'([0-9]+)\'/無關做 實例的任何變量,這是一個正則表達式檢查,以查看該 的readline在while (<$uamin>)是否包含start=\'([0-9]+)\'\'([0-9]+)\'指的是數字字符串。
  • $features =~ s/annotation;//=~被使用,因爲字符串 替換是測試正則表達式匹配。見 What does =~ do in Perl?

回答

2

你在哪裏看到這個語法(或更重要的是:有你編輯的東西出來,你看到了什麼)? /foo/表示使用正則表達式的匹配運算符,而不是變量。換句話說,第一行是檢查輸入字符串$_是否包含字符序列<segment

接下來的三行基本上沒有任何用處,因爲它們運行正則表達式匹配,然後放棄結果(有副作用,但隨後的正則表達式也放棄副作用)。

最後一行進行替換,用字符串$features中的空字符串替換字符annotation;的第一個出現。

運行命令perldoc perlretut以瞭解Perl中的正則表達式。

+0

我還沒有編輯代碼。你是否認爲第一行檢查inputtrng $ _是否包含字符「 segment」? – alvas 2012-07-21 22:18:15

+0

@ 2er0:錯字,對不起 – 2012-07-22 00:38:16