5

次の2行のperlの目的は何ですか?

my $host = shift || 'localhost';
my $port = shift || 200;

localhostとポート10が返されるはずです。shiftキーワードとは何ですか?

4

5 に答える 5

9

@_最初の行は、または@ARGV(コード内のどこにいるかに応じて)からシフトするか、 @_/にコンテンツがない場合は@ARGV、に割り当てlocalhostられ$hostます。

2つ目は、今では自明のはずです。

詳細については、シフトのドキュメントをご覧ください。

于 2011-05-21T09:15:30.430 に答える
6

このコードは、とのデフォルト値を提供する方法$hostです$port。これは通常、スクリプトまたはサブルーチンの開始時に行われ、@ARGVそれぞれおよびから値を取得します@_

これにより、ローカルホストとポート10が返されます。

いいえ、||演算子は短絡ORです。つまり、LHSオペランドが真の値を返す場合、RHSオペランドは無視されます。基本的に、これはこれを意味します(そしてこれだけ):「それが真である場合は左側の値を選択し、そうでない場合は右側の値を選択します。」

shift ARRAYARRAY、またはの最初の値を返します。

ARRAYを省略した場合、@ _配列をサブルーチンとフォーマットの字句スコープ内にシフトし、@ ARGV配列をサブルーチンの外側にシフトし、eval STRING、BEGIN {}、INIT {}、CHECK{}によって確立された字句スコープ内にもシフトします。 、UNITCHECK{}およびEND{}構文。

http://perldoc.perl.org/functions/shift.htmlから引用

また、もちろん、shiftシフトされた配列から値を削除します。したがってshift、非常に便利な引数処理のために、このように2つ続けて配置することができます。

于 2011-05-21T11:29:51.770 に答える
3

引数が指定されていない場合、shiftは@ARGVをサブルーチンの外側にシフトし、@ _をサブルーチンの内側にシフトします。これは、メインプログラムまたはサブルーチンのいずれかに渡される引数配列です。

あなたの場合、$ hostには@ARGVの最初の要素(またはコードがsub内にある場合は@_)が割り当てられ、要素がfalseの場合は'localhost'が割り当てられます。

これは非常に一般的なPerlイディオムです。

于 2011-05-21T09:19:28.817 に答える
2

を使用する場合はshift、常に配列を配置してください。私は、Perlプログラマーがサブルーチンの外でshift動作することを忘れている経験を見てきました@ARGV。プログラマーが同時に覚えておかなければならないことが多ければ多いほど、間違いを犯す可能性が高くなります。

于 2011-05-21T12:34:57.910 に答える
2

shiftは、配列の最初の要素を返し、それを配列から削除します。ポップのようですが、反対側から。

于 2011-05-21T09:13:42.157 に答える