Si palabra se define como \w+ entonces es un one-liner: ++$nwords while $str =~ /\w+/g; Si no hay que ver.