>perl -wMstrict -le "my $s = 'xx @ra[1] y @ara[23] z @ra[1] aa @ara[23] b @ra[1] @ara[23]'; print qq{'$s'}; ;; my %found; $s =~ s{ \@ ([a-z] [a-z\d_]* \[) \K (\d+) (?= \]) } { $found{$1 . $2} //= int rand 9999; }xmsge; print qq{'$s'}; " 'xx @ra[1] y @ara[23] z @ra[1] aa @ara[23] b @ra[1] @ara[23]' 'xx @ra[2038] y @ara[6310] z @ra[2038] aa @ara[6310] b @ra[2038] @ara[6310]'