use GreekFile qw/gr_glob gr_open/; binmode STDERR, ":utf8"; # might help for error reporting # ... my @files = gr_glob( "../data/text/*.txt" ); # @files is an array of utf8 strings # because the gr_glob function in GreekFile.pm handles that conversion my %display_files; # let's store file names in a hash for ( @files ) { my $f = $_; $f =~ s/\.txt//; $display_files{$f} = $_; # use hash keys for display, hash values as file paths } # ... my $passage = param( 'select' ) || "blah blah (in Greek)"; # $passage is assumed to be in utf8 if ( exists( $display_files{$passage} )) { gr_open( FILE, "<:utf8", $display_files{$passage} ) or die "$0: $display_files{$passage}: $!"; local $/; my $data = ; # $data is assumed to be utf8 # ... do stuff with $data ... }