私はこれらの2行を見つけて、彼らが何をしているのかを調べようとしましたが、それがコードで何を意味するのかはまだ疑いがありません。私が言うコードは次のとおりです。
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
my $mapped_to = ($num_phones_out == 48)? = $2 : $3;
括弧の後に疑問符がある変数()が何をしているのかわかりません。そして、ドル記号(変数)があり、コロンで区切られた2つの数字が何を意味するのかわかりません。
コードの詳細を提供するために、このセクションでは次のファイルを使用します。
ah X /
au u aU
列にはそれぞれ60、48、39行があります。誰かが私に手がかりを与えることができたら、私は少し迷子になったので、本当に感謝します。
答え1
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
構文エラーです。test ? val_true : val_false
はい「三項演算子」、お問い合わせインライン形式ですif-else
。 trueの場合はtest
このval_true
部分が計算され、test
falseの場合はこのval_false
部分が計算されます。疑問符は括弧には関係ありません。しかし、これは= $1
正しい表現ではありません。
=
追加のエントリがない場合は60($num_phones_in == 60)? $1 : $2;
であることを確認し、$num_phones_in
それに応じて$1
ORを返します$2
。
$1
および$2
(等) は、前の正規表現でキャプチャグループの内容を参照する変数です。そうすると、"afoob" =~ /a(.*)b/
その内容が$1
含まれますfoo
。バラよりperlvarの正規表現関連変数。
答え2
三項演算子と? :
呼ばれ、現代言語で最も多く乱用される演算子の一つと言われています。 (特に入れ子になった三項演算子です。)次の2行は同じです。
$value = ($a > 9) ? 10 : 0;
if ($a > 9) { $value = 10 } else { $value = 0 };
$1
また、$2
最新の正規表現の角かっこ一致の結果についても質問しています。例えば、
$a = 'Hello world. 1+2 is 3';
$a =~ /(\w+).*?(\d+)/;
print "1=$1, 2=$2\n";. # "1=Hello, 2=1"
答え3
DIY
メタ答え:自分で学びましょう。
Perlには非常にクールなデバッグモードがあります。次のように入力できます。
perl -de1
(これは-d
(デバッグモード)と(ステートメント「1」を実行する)-e 1
のための便利なショートカットだけであり、最小限の文字を入力できるという利点がある簡単なランダムです。)
これにより、すぐに実行されるPerlコードを入力できるデバッガを使用するように求められます。この試み:
$num_phones_in = 10;
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
すぐに構文エラーが発生します。 2番目は=
去る必要があります。読みやすくするために、演算子からすべてのスペースを削除したり、?:
必要に応じてスペースを追加したりできます。 Perlは気にしませんが、同僚は気にしています。
my $mapped_from = ($num_phones_in == 60)?$1:$2;
my $mapped_from = ($num_phones_in == 60) ? $1 : $2;