¿Cómo puedo hacer una coincidencia de expresión regular global en Perl?

Estoy tratando de encontrar una expresión regular en Perl que coincida con múltiples patrones y los devuelva a todos comopreg_match_all en PHP lo hace.

Esto es lo que tengo:

$str = 'testdatastring';
if($str =~ /(test|data|string)/) {
        print "its found index location: $0 $-[0]-$+[0]\n";
        print "its found index location: $1 $-[1]-$+[1]\n";
        print "its found index location: $2 $-[2]-$+[2]\n";
        print "its found index location: $3 $-[3]-$+[3]\n";
}

Esto solo me da la primera coincidencia que en este es 'prueba'. Quiero poder hacer coincidir todas las apariciones de patrones especificados: 'prueba', 'datos' y 'cadena'.

Sé que en PHP, puede usar preg_match_all para este tipo de propósito:

if(preg_match_all('/(test|data|string)/', 'testdatastring', $m)) {
        echo var_export($m, true);
}

El código PHP anterior coincidiría con las 3 cadenas: 'prueba', 'datos' y 'cadena'.

Quiero saber cómo hacer esto en Perl. Cualquier ayuda sería muy apreciada.

Respuestas a la pregunta(4)

Su respuesta a la pregunta