Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно упростить программу... Как можно упростить программу 
:(
    Опции темы
treee
Дата 13.1.2011, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.12.2010

Репутация: нет
Всего: нет



Подскажите, отмеченные части, как то можно упростить? Может кто то подскажет, а то мне кажется получилось громоздко, может есть проще?


Код

 open FF,"<$day/1111" || MyDie("can't open $day/1111");




##############
[b]my %userst = ();
my %userss = ();
##############

  while (<FF>) {

  ($years,$month,$day,$time,$userrr,$site,$size,$ippp)=split;


if ( $site eq $user )

{


###########################
$userst{$time}++;
$sizee{$time}{$size}++;
$userss{$time}{$size}{$userrr}++;
###########################

####################################
foreach $key (sort keys %userst)
{


foreach $pkey (keys %{$sizee{$key}})
{


foreach $ppkey (keys %{$userss{$key}{$pkey}})
{
####################################
$N++;


$sizz =FineDec ($pkey);

 

  $tmp=$hTPL{site};

 $tmp=~s/##NUM##/$N/;
 $tmp=~s/##SIZE##/$sizz/g;
 $tmp=~s/##SITE##/$ppkey/;
 $tmp=~s/##TIME##/$key/;
 $tpl{site} .= $tmp;


}}}

    close FF;
}


Это сообщение отредактировал(а) treee - 13.1.2011, 07:25
PM MAIL   Вверх
srl
Дата 20.1.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Ну насчёт упростить не знаю, а улучшить можно:
  •  со стриктом (use strict) пиши, без стрикта не пиши;
  •  %userst, %userss, $userrr - переменные называй по человечески, осмысленно, не ленись - а то через месяц сам не вспомнишь, что эта хрень означает (я уж молчу о страданиях других людей, если им попадётся твой код);
  •  MyDie - для этого в перле есть $SIG{__DIE__};
  •  используй человеческое форматирование (отступ в каждом блоке);
  •  используй обычные скаляры для файловых хендлеров, typeglob тебе не нужен.


Это сообщение отредактировал(а) srl - 20.1.2011, 20:46
PM MAIL   Вверх
sir_nuf_nuf
Дата 21.1.2011, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 2
Всего: 31



Цитата(srl @  20.1.2011,  20:45 Найти цитируемый пост)
MyDie - для этого в перле есть $SIG{__DIE__};

Эт спорный вопрос =)
По мне так от использования SIG{__DIE__} больше проблем чем профита.
Если потом в каком-то месте нужно отключить это поведение - нужно помнить про это и делать local..


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
srl
Дата 21.1.2011, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Цитата(sir_nuf_nuf @  21.1.2011,  11:43 Найти цитируемый пост)
По мне так от использования SIG{__DIE__} больше проблем чем профита.


Ну, я, если честно, с трудом себе могу представить ситуацию, когда тебе не хочется логировать die твоих скриптов. 8) В конце концов, можно с помощью local навешивать хендлер в нужных местах кода.
PM MAIL   Вверх
sir_nuf_nuf
Дата 23.1.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 2
Всего: 31



Цитата(srl @  21.1.2011,  21:16 Найти цитируемый пост)


Ну, я, если честно, с трудом себе могу представить ситуацию, когда тебе не хочется логировать die твоих скриптов. 8) В конце концов, можно с помощью local навешивать хендлер в нужных местах кода. 


Ну например в реализации timeout через die / alarm,  ну например когда die используется для прекращения обработки шаблона (STOP в Template::Toolkit) или для прекращения контоллера (есть в каталисте).


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
mishnik
Дата 8.4.2011, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 6.3.2011

Репутация: нет
Всего: 1



я бы как-нибудь так сделал, ну и возможно переменные назвал бы пофункциональнее
Код

##############################################################################
#      $URL: http://my.site.ru $
#     $Date: 2011-02-17 20:53:20 +0300 (Mon, 14 Feb 2011) $
#   $Author: i am $
# $Revision: 1.02 $
#   $Source: My_useful_package.pl $
#   $Description: my script do all $
##############################################################################
package My_useful_package;

use 5.006;
use strict;
use warnings;
use English qw(-no_match_vars);
use Carp;

our $VERSION = '0.01';

open my $fh, q{<}, "$day/1111" or croak "can't open $day/1111";
my $ret = process_file($fh);
close $fh or croak "unable to close: $wfile $ERRNO";

sub process_file {
    my ($fh) = @_;
##############
    my %userst = ();
    my %userss = ();
##############
    while (<$fh>) {
        ( $years, $month, $day, $time, $userrr, $site, $size, $ippp ) = split;
        if ( $site eq $user ) {
###########################
            $userst{$time}++;
            $sizee{$time}{$size}++;
            $userss{$time}{$size}{$userrr}++;
###########################
####################################
            foreach my $key ( sort keys %userst ) {
                foreach my $pkey ( keys %{ $sizee{$key} } ) {
                    foreach my $ppkey ( keys %{ $userss{$key}{$pkey} } ) {
####################################
                        $N++;
                        $sizz = FineDec($pkey);

                        $tmp = $hTPL{site};
                        $tmp =~ s/##NUM##/$N/sm;
                        $tmp =~ s/##SIZE##/$sizz/gsm;
                        $tmp =~ s/##SITE##/$ppkey/sm;
                        $tmp =~ s/##TIME##/$key/sm;
                        $tpl{site} .= $tmp;
                    }
                }
            }
        }
    }
    return 1;
}
1;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.