Assigning to a variable returns as its result the value that was assigned.
$foo = 3 returns 3,
$bar = 'xyzzy' returns 'xyzzy', and so forth.
$string = shift assigns
$string the value of the first argument passed and returns that value, which is then evaluated by the
or as either true or false. If the value is false (empty, undef, or 0), it then evaluates whatever comes after the
or, in this case
return "". If the value is true (any other value), then we already know that the expression is true (an
or is true if either side is true), so it just continues on without evaluating the expression after the
or. Evaluating only as much of a logical expression as is necessary to determine whether it's true or false is known as "short-circuit evaluation".
So:
- If there are no arguments or the first argument is false, there's nothing to truncate, so return an empty string.
- If the second argument is missing or false, then we have no maximum length to truncate to, so return the original string without modification.
Note, however, that there is a subtle bug in the first argument's handling: An empty string is returned if the first argument is
false, not just if it's
empty. This means that the string '0'
(or '00' or '000' or...) will be incorrectly truncated to ''.
Edit: Thanks to gwadej for correcting my incorrect impression that strings containing (only) multiple zeroes would evaluate as false.