DIY

DIY

私はこれらの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部分が計算され、testfalseの場合はこのval_false部分が計算されます。疑問符は括弧には関係ありません。しかし、これは= $1正しい表現ではありません。

=追加のエントリがない場合は60($num_phones_in == 60)? $1 : $2;であることを確認し、$num_phones_inそれに応じて$1ORを返します$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;

関連情報