#!/usr/bin/perl use strict; use warnings; package Random_Char; sub TIESCALAR { bless {}, $_[0] } sub STORE { return 1 } sub FETCH {open(I,$0);my $l;while(){$l=$_ and last if$.==(caller)[2]} $l =~ s/^.*=\s*(["'])(.*)\1\s*=~.*$/$2/;my @c=keys%{{ map{$_=>undef}split//,$l}};return $c[rand @c]; } package main; tie my $rand_char, "Random_Char"; my ($char) = 'One bright day in the middle of the night' =~ /($rand_char)/; print "$char\n";