Perl shift operator simple question

时光总嘲笑我的痴心妄想 提交于 2019-12-01 18:19:03

What this piece of code is, is a way to provide default values for $host and $port. It will typically be at the start of a script or a subroutine, and take values from @ARGV and @_ respectively.

That should return localhost and port 10.

No, the || operator is a short circuiting OR, which means that if the LHS operand returns a true value, the RHS operand is ignored. Basically, it means this (and ONLY this): "choose the left hand side value if it is true, otherwise choose the right hand side value."

shift ARRAY will return the first value of ARRAY, or:

If ARRAY is omitted, shifts the @_ array within the lexical scope of subroutines and formats, and the @ARGV array outside a subroutine and also within the lexical scopes established by the eval STRING , BEGIN {} , INIT {} , CHECK {} , UNITCHECK {} and END {} constructs.

Quoted from http://perldoc.perl.org/functions/shift.html

Also, of course, shift removes the value from the array that is shifted. Therefore you can have two shift in a row like this, for very convenient argument handling.

DavidO

The first line shifts from either @_ or @ARGV (depending on where you are in the code), or in the absence of any contents in @_/@ARGV, assigns localhost to $host.

The second one should be self-explanatory now.

Have a look at the shift documentation for details.

i-blis

If no argument is provided, shift will shift @ARGV outside a subroutine and @_ inside a subroutine – that is the argument array passed to either the main program or the subroutine.

In your case, $host is assigned the first element of @ARGV (or @_, if the code is inside a sub) or 'localhost', if the element is false.

This is a very common Perl idiom.

shift return the first element of an array and removes it from the array. Like pop, but from the other end.

If you use shift, always put the array on it. I've seen experience Perl programmers forget that outside a subroutine, shift works on @ARGV. The more things a programmer has to remember at the same time, the more likely he is to make an error.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!