use vars qw(%keybinding); %keybinding = ( ... default keybinding ); my @user_bindings = do 'user_keybinding.pl'; while (@user_bindings) { my ($k,$v) = splice @user_bindings, 0, 2; $keybinding{$k} = $v; }; sub key_down_filter { my ($sci_frame, $event) = @_; my $key = $event->GetKeyCode; if ($event->AltDown) { $key = "a$key"; }; # same for shift, ctrl, meta, footpad, escape if (exists $keybinding{$key}) { # dispatch $keybinding{$key}->($sci_frame,$event,$key); }; };