LINUX.ORG.RU

perl без goto


0

0

Никак не могу придумать, как нормально обойтись без goto
примерно такой код:

#!/usr/bin/perl -w

use strict;

use CGI;
use HTML::Template;

use settings;
use session;
use content;
use db;
use user;

our $cookie = "";
&session::load();
our $template;

my $action = &CGI::url_param('action');
$action = "" if not defined($action);
if ($action eq "") {
    if ($user::status < 10) {
        $template = HTML::Template->new(filename=>'error.tmpl');
        $template->param('message'=>'Вы не имеете доступа к этой странице');
    }
    else {
        &db::sql('SELECT U_ID, U_NAME, U_STATUS FROM USER;');        
        $template = HTML::Template->new(filename=>'users_view.tmpl');
        ...
    }
}

&set_page_content();

print &CGI::header(-cookie=>$cookie, -charset=>'koi8-r');
print $template->output();



Собственно приходится для контроля ошибок использовать конструкции вроде

if (ошибка) {
    Обработка ошибки;
}
else {
    Нормальное продолжение;
    if (ошибка) {
        Обработка второй ошибки;
    }
    else {
        Нормальное продолжение;
    }
}

Завершение;


Секция завершения должна выполняться всегда. Когда много ошибок, получается некрасивый код. goto пользовать не хочу ибо табу :-) Есть ещё более кривой вариант
if (ошибка)
    Обработка ошибкиж
    Завершение;
    exit;
}
Нормальное продолжение;
Завершение;

В этом случае придётся многократно копировать Завершение, что тоже не очень хорошо.
Как бы сделать здесь получше?

PS Если будут замечания по самому коду, тоже приму с благодарностью, потому что на перле только учусь писать
★★★★★
Ответ на: комментарий от guardian

Есть самописный, через тот же самый eval

Chumka ★★★
()
Ответ на: комментарий от guardian

> eval("шибко глючный код") есть. Его и юзать.

Да он не шибко глючный, просто при определённых условиях будет ошибка. Если это подразумевалось - подумаю. В принципе, мне кажется, здесь goto будет уместен, и особо ничего нарушаться не будет.

Legioner ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.