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 mailing list
[email protected] | http://moscow.pm.org

Ответить