Re: [Boston.pm] catenation of undef with string, 2 cases
Uri Guttman <uri-X/[email protected]>
| Newsgroups | gmane.comp.lang.perl.perl-mongers.boston |
|---|---|
| Organization | Perl Hunter |
| Message-ID | <[email protected]> |
On 11/09/2016 01:40 PM, Morse, Richard E.,MGH wrote: >> On Nov 9, 2016, at 12:49 PM, Mike Small <[email protected]> wrote: >> >> >> #!/usr/pkg/bin/perl >> use warnings; >> >> my $a; >> $a .= '70'; >> my $b; >> $b = 42 . $b; >> print "$a, $b\n"; >> >> >> With the script above I get an uninitialized value warning from perl >> 5.24 for the second concatenation but not the first. Is there a story >> behind this? Something to do with the first case being something you'd >> likely want to do without whinging from the interpreter? > Interestingly, if you swap the order of the second concatenation, you don’t get the warning, which makes it consistent. > > I don’t know if this is the reason, but here’s a place this would be somewhat useful: > > ... > my $out; > foreach my $k (sort keys %h) { > $out .= “$k: $h{$k}\n”; > } > ... > > otherwise, you have to start with: > > my $out = ‘’; > > (admittedly, that’s how I always start this, but it’s interesting to note that I could leave out the assignment to ‘’.) > > appending to undef is handled like incrementing (or +=) an undef. it is too common and useful to trigger a warning. not requiring initialization to '' or 0 saves a lot of code. note that this is especially true with data structures. $href->{text} .= $stuff is very useful. if i had to initialize it to '' beforehand i would hate it. this works for .= += and ++ (maybe some other things but those are the primary ones). uri _______________________________________________ Boston-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/boston-pm