If we comment out the "use PDL;" we then get the expected output of "3". As Anonymous Monk said, one solution is to use CORE::index() instead of index(). Another solution is to use PDL(); instead of use PDL;
But it's a bit rude of PDL to be exporting this function by default, isn't it ?
Update: The PDL documentation states:
PDL includes about a dozen perl modules that form the core of the
language, plus additional modules that add further functionality. The
perl module "PDL" loads all of the core modules automatically, making
their functions available in the current perl namespace.
"use PDL;" exports a large number of routines into the calling
namespace. If you want to avoid namespace pollution, you must
instead "use PDL::Lite", and include any additional modules