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

Reply via email to