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