in reply to Re^2: Use of uninitialized value in substr
in thread Use of uninitialized value in substr

It just strikes me that as substr is a built-in, it could accept undef as a legitimate parameter.
Actually, it's only build-ins (be them functions or operators) that trigger this warnings. Which you have to actually enable to see them.

Why shouldn't this warn, but any of the following should:

$x = 3 + undef; printf "%s", undef; undef =~ /./;
The warning is to catch cases like:
$x = expression unexpectedly returning undef. substr $y, 1, 2, $x;
One could argue that using a literal undef shouldn't trigger the warning (after all, then the programmer is explicit), but I don't think that information is easily available at the moment the warning is triggered. And the programmer may as well write "" or 0 anyway, saving some keystrokes.