in reply to Conditional module use
Once you fix the problem identified by gaal, a runtime error will be revealed. $@ is no longer set when you get around to executing $use_readkey's initialization, as shown in the following snippet:
BEGIN { eval { die }; print($@ ? 1 : 0, "\n"); # 1 } print($@ ? 1 : 0, "\n"); # 0
Change
BEGIN { eval { require Term::ReadKey; }; }; my $use_readkey = 1 unless $@;
to (minimal change)
my $use_readkey; BEGIN { eval { require Term::ReadKey; }; $use_readkey = 1 unless $@; }
or (simpler)
my $use_readkey; BEGIN { $use_readkey = eval { require Term::ReadKey }; }
or (even simpler, but done at compile time)
my $use_readkey = eval { require Term::ReadKey };
Update: There's yet a third error.
not $use_readkey ? ... : ...
means
not ($use_readkey ? ... : ...)
Use
!$use_readkey ? ... : ...
or
(not $use_readkey) ? ... : ...
Operator precedence is documented in perlop. Note that
! has higher precedence than ?:, and
not has lower precedence than ?:.
|
|---|