On 11/09/2016 03:24 PM, Mike Small wrote:
Uri Guttman <[email protected]> writes:

On 11/09/2016 02:04 PM, Bill Ricker wrote:
I think Uri and Ricky have it nailed.

You can
wrap with do{ no warnings; ...  }  or
protect the concatenation with  42 . ($b//q()); or equivalent ?: or or
use $b .= 42 ; if order doesn't matter (it usually does, though)
or initialized $b to '' instead of undef, knowing it will be
concatenated (but in that case be sure it's tested for Truth not
Definedness)


just to add on, i use .= so often. i like to build up strings and then
return the whole string. i never initialize them to '' as i know .=
works without warning. this is true for scalars and data structures as
i said before. any lvalue undef can be used in this way.

uri

Thanks everyone. Especially thanks for relating it to +=. I have trouble
remembering the handy special cases but when it's somewhat systematic
that helps.

another systemic and related thing in perl is autovivification. i have seen newbies always check for undef and then assigning a hash/array ref before adding elements to the hash/array. this is how some other langs require things to be done. perl has always had neat shortcuts like autoviv and no undef warnings on +=, .= and ++ because those are very popular operations and having perl do some init behind the scenes for you is way cool.

uri


_______________________________________________
Boston-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/boston-pm

Reply via email to