Perl оператор сдвига простой вопрос - PullRequest
5 голосов
/ 21 мая 2011

Какова цель следующих двух строк perl ??

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

Это должно вернуть localhost и порт 10. Что такое ключевое слово shift ??

Ответы [ 5 ]

9 голосов
/ 21 мая 2011

Первая строка сдвигается либо с @_ или @ARGV (в зависимости от того, где вы находитесь в коде), либо при отсутствии какого-либо содержимого в @_ / @ARGV, присваивает localhost к $host.

Второй должен быть понятен сейчас.

Подробнее смотрите в сменной документации .

6 голосов
/ 21 мая 2011

Что это за фрагмент кода, это способ предоставления значений по умолчанию для $host и $port.Обычно он находится в начале скрипта или подпрограммы и принимает значения от @ARGV и @_ соответственно.

Это должно вернуть localhost и порт 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 в строке, как это, для очень удобной обработки аргументов.

3 голосов
/ 21 мая 2011

Если аргумент не указан, shift сместит @ARGV вне подпрограммы и @_ внутри подпрограммы - это массив аргументов, переданный либо в главную программу, либо в подпрограмму.

В вашем случае $ host присваивается первый элемент @ARGV (или @_, если код находится внутри подпрограммы) или 'localhost', если элемент ложный.

Это очень распространенныйPerl идиома.

2 голосов
/ 21 мая 2011

Если вы используете shift, всегда помещайте в него массив.Я видел опыт программистов на Perl, которые забывают, что вне подпрограммы shift работает на @ARGV.Чем больше вещей нужно запомнить программисту, тем больше вероятность, что он допустит ошибку.

2 голосов
/ 21 мая 2011

shift возвращает первый элемент массива и удаляет его из массива. Как поп, но с другого конца.

...