次の2行のperlの目的は何ですか?
my $host = shift || 'localhost';
my $port = shift || 200;
localhostとポート10が返されるはずです。shiftキーワードとは何ですか?
@_
最初の行は、または@ARGV
(コード内のどこにいるかに応じて)からシフトするか、 @_
/にコンテンツがない場合は@ARGV
、に割り当てlocalhost
られ$host
ます。
2つ目は、今では自明のはずです。
詳細については、シフトのドキュメントをご覧ください。
このコードは、とのデフォルト値を提供する方法$host
です$port
。これは通常、スクリプトまたはサブルーチンの開始時に行われ、@ARGV
それぞれおよびから値を取得します@_
。
これにより、ローカルホストとポート10が返されます。
いいえ、||
演算子は短絡OR
です。つまり、LHSオペランドが真の値を返す場合、RHSオペランドは無視されます。基本的に、これはこれを意味します(そしてこれだけ):「それが真である場合は左側の値を選択し、そうでない場合は右側の値を選択します。」
shift ARRAY
ARRAY
、またはの最初の値を返します。
ARRAYを省略した場合、@ _配列をサブルーチンとフォーマットの字句スコープ内にシフトし、@ ARGV配列をサブルーチンの外側にシフトし、eval STRING、BEGIN {}、INIT {}、CHECK{}によって確立された字句スコープ内にもシフトします。 、UNITCHECK{}およびEND{}構文。
http://perldoc.perl.org/functions/shift.htmlから引用
また、もちろん、shift
シフトされた配列から値を削除します。したがってshift
、非常に便利な引数処理のために、このように2つ続けて配置することができます。
引数が指定されていない場合、shiftは@ARGVをサブルーチンの外側にシフトし、@ _をサブルーチンの内側にシフトします。これは、メインプログラムまたはサブルーチンのいずれかに渡される引数配列です。
あなたの場合、$ hostには@ARGVの最初の要素(またはコードがsub内にある場合は@_)が割り当てられ、要素がfalseの場合は'localhost'が割り当てられます。
これは非常に一般的なPerlイディオムです。
を使用する場合はshift
、常に配列を配置してください。私は、Perlプログラマーがサブルーチンの外でshift
動作することを忘れている経験を見てきました@ARGV
。プログラマーが同時に覚えておかなければならないことが多ければ多いほど、間違いを犯す可能性が高くなります。
shiftは、配列の最初の要素を返し、それを配列から削除します。ポップのようですが、反対側から。