-4

私はperlのコーディング規約に少し慣れていません.誰かが説明するのを手伝ってくれます:

  • perl変数の前に ある/のはなぜですか?/<
  • と は何\==~意味し、違いは何ですか?
  • なぜコードの/前に;末尾 が必要なの/start=\'([0-9]+)\'/ですか?

最初の 3 つのサブ質問は実際には perldocs によって解決されましたが、コード内の次の行は何を意味するのでしょうか?

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

$features を @Start 配列にプッシュしていることは理解していますが、どういう@$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); 
    }
}

編集済み

だから、perl doc を集中的に読んだ後、ここに私が得たものがあります

  • /<segment /readline に次の文字列が含まれているかどうかをチェックする正規表現チェックですwhile (<$uamin>): <segment.
  • 同様に、/start=\'([0-9]+)\'/変数のインスタンス化とは何の関係もありません。数値文字列 を 参照する readline がwhile (<$uamin>)含まれているかどうかを確認するための正規表現チェックです。start=\'([0-9]+)\'\'([0-9]+)\'
  • $features =~ s/annotation;//文字列の=~置換が正規表現の一致をテストしていたためです。=~ は Perl で何をするのですか?を参照 してください。
4

1 に答える 1

2

この構文はどこで見たのですか (またはもっと要点を言えば、見たものを編集したことがありますか)? /foo/変数ではなく、正規表現を使用して一致演算子を表します。$_つまり、最初の行は、入力文字列に文字シーケンスが含まれているかどうかを確認しています<segment

後続の 3 行は、正規表現の一致を実行してから結果を破棄するという意味で、本質的には何の役にも立ちません (副作用はありますが、後続の正規表現も副作用を破棄します)。

最後の行は置換を行い、最初に出現した文字annotation;を string 内の空の文字列に置き換えます$features

コマンドperldoc perlretutを実行して、Perl の正規表現について学習します。

于 2012-07-21T22:04:15.097 に答える