open DMLOG, "<dmlog.txt" or &error("Can't open log file: $!");
chomp(@entirelog=<DMLOG>);
close DMLOG;
for $line (@entirelog)
{
if ($line =~ m/\#F/)
{
$titlecolumn = $line;
last;
}
}
=~ は正規表現だと思いますが、ここで何をしているのかよくわかりません。
に続く$titlecolumn
を含む最初の行を に割り当てます。#
F
はバインド演算子=~
であり、正規表現を文字列に適用します。通常、その正規表現は. プレフィックスは、次のリテラルがプレフィックスであることを強調するために使用できます (他の区切り文字が使用されている場合に重要です) 。/#F/
m
正規表現とは何か理解していますか? それとも、=~
あなたを捨てていますか?
ほとんどのプログラミング言語では、次のように表示されます。
if ( regexp(line, "/#F/") ) {
...
}
ただし、Perl では、正規表現は Awk の構文に触発されています。したがって:
if ( $line =~ /#F/ ) {
...
}
は=~
、正規表現が左側の変数名に作用することを意味します。パターン#F
が で見つかった$line
場合、if
ステートメントは true です。
正規表現に慣れていない場合は、正規表現のチュートリアルを参照してください。正規表現は非常に強力で、Perl で非常に一般的に使用されています。実際、これらは Perl で非常によく使用される傾向があり、他の言語の開発者が Perl は書き込み専用言語であると主張する理由の 1 つです。
これはBinding Operatorと呼ばれます。RHS のパターンと LHS の変数を一致させるために使用されます。同様に!~
、一致を否定するものがあります。
あなたの特定のケースでは:
$line =~ m/\#F/
$line
これは、 がパターン -に一致するかどうかをテストし/#F/
ます。
はい、=~
式をパターン マッチにバインドするバインド演算子m//
です。
このif
ステートメントは、行が指定された正規表現に一致するかどうかをチェックします。この場合、ハッシュ記号の後に大文字の F が続くかどうかをチェックします。
#
バックスラッシュは、コメント記号として扱われることを避けるために (おそらく) 追加されたばかりです (これは必要ありません)。