#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; use List::Util qw{ shuffle }; my @words = qw( this is my string ); my @order = 0 .. $#words; my %ord; @ord{@words} = 0 .. $#words; @words = shuffle(@words); @order = @ord{@words}; print do { local $" = "\t"; "@words\n", "@order\n" }; say join ' ', map $words[$_], sort { $order[$a] <=> $order[$b] } @order;