#!/usr/bin/perl use strict; use warnings; package Random_Char; use PadWalker 'peek_my'; sub TIESCALAR { bless {}, $_[0] } sub STORE { return 1 } sub FETCH {my @c=keys%{{map{$_=>undef}split//,${peek_my(1)->{'$string'}}}};return $c[rand @c];} package main; tie my $rand_char, "Random_Char"; my $string = 'One bright day in the middle of the night'; my ($char) = $string =~ /($rand_char)/; print "$char\n";