То, что вы действительно хотите, это таблица отправки. Когда вы сталкиваетесь с командой, такой как cd
, вы ищете соответствующую подпрограмму в таблице диспетчеризации, где вы сопоставляете действительные команды с кодом, который вы хотите выполнить:
%dispatch = (
cd => sub { chdir( $_[0] ) },
...
);
while( <> )
{
my( $command, @args ) = split;
if( exists $dispatch{ $command } )
{
$dispatch{ $command }->(@args);
}
}
У меня есть несколько расширенных примеров такого рода вещей в Мастеринг Perl . Приятным моментом является то, что вы не меняете цикл обработки, когда у вас есть новые команды, и вы обрабатываете только те команды, которые намереваетесь обрабатывать. Кроме того, вы можете создать эту таблицу диспетчеризации непосредственно из конфигурации.