Eu não entendo muito bem sua linha de código; talvez tenha sido confundido.
Minha abordagem seria um pouco diferente: primeiro, crie um alias que receba a saída de um programa e crie um cd para ele:
alias mycd='cd $(select-dir)'
Em seguida, faça o programa imprimir o menu para stderr e a opção stdout, por exemplo, assim:
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my @entries = ('..', grep {-d} glob("*"));
for my $i (0..$#entries) {
printf STDERR (" %2d: $entries[$i]/\n", $i);
}
$| = 1;
print STDERR ("cd to: ");
say($entries[<>]);