[Moscow.pm] Запутался
Alexey Shrub
worldmind на mail.ru
Пт Окт 5 01:35:05 PDT 2012
02.10.2012 14:02, Sergiy Borodych пишет:
> вот первое что пришло в голову
>
> my @comands = qw( a b c d e );
> # ну или
> #my %commands = ( a => sub { ... }, ... );
>
> my $cur_command = $ARGV[0];
> my $run;
>
> foreach my $command ( @comands ) {
> # этот момент можно и красивей придумать ;)
> $run = 1 if $command eq $cur_command;
> next unless $run;
>
> # здесь или
> if ($command eq 'a') ... elsif ...
> # или лучеше еще использовать dispatch table
> $comands{$command}->();
> }
>
>
> Сам использую goto редко, но иногда действительно с ним легче только
> правда для вариантов 1 и 3 ;)
Может как-то так
use v5.10;
my @commands = qw( a b c );
my %commands = ( 'a' => sub { say 1 }, 'b' => sub { say 2 }, 'c' => sub
{ say 3 } );
my $curr_cmd = $ARGV[0] // 'a';
my $last_cmd = $commands[$#commands];
foreach my $cmd_name ( $curr_cmd .. $last_cmd ) {
$commands{$cmd_name}->();
}
структуру данных можно похитрее сделать чтобы избежать дублирования, но
для демонстрации достаточно и так
По теме - goto использовал только раз когда нужно было cgi скрипт с
глобальными переменными быстро превратить в модперлловое приложение -
работает, но это временный костыль
--
Alexey Shrub
Подробная информация о списке рассылки Moscow-pm