Como posso fazer uma correspondência global de expressão regular no Per

Estou tentando criar uma expressão regular no Perl que corresponda a vários padrões e retorne todos eles comopreg_match_all no PHP faz.

Aqui está o que eu tenho:

$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";
}

Isso me dá apenas a primeira partida que é 'teste'. Quero poder corresponder a todas as ocorrências de padrões especificados: 'test', 'data' e 'string'.

Sei que, em PHP, você pode usar preg_match_all para esse tipo de objetivo:

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

O código PHP acima corresponderia a todas as três strings: 'test', 'data' e 'string'

Quero saber como fazer isso no Perl. Qualquer ajuda seria muito apreciada

questionAnswers(4)

yourAnswerToTheQuestion