2014-11-09 5 views
-2

Моя задача состоит в том, чтобы передать правила «Perl Руководство Стиль» на следующий код:Использование Perl Руководство Стиль правил

http://kulnet.kuleuven.be/perlcourse/perlingo.html

ли кто-нибудь видеть, какие правила, которые я не следуют до сих пор? (Указания по главам и функциям отсутствуют намеренно.)

$ lnp, $ pst1, $ pst2 устанавливается в config.pl.

Спасибо.

#! /usr/bin/perl 
use strict; 
use warnings; 
use DBI; 

require config; 

MAIN: { 
    $lnp->execute(); 
    while(@data = $lnp->fetchrow_array()) { 
     my ($sn, $en, $portDate, $rcvCarrier, $originCarrier) = @data; 
     my (@list) =(); 
     if ($en =~ /^$/) { 
     @list = ($sn); 
     } 
     else { 
     @list = &calc($sn...$en); 
     } 
     foreach my $prefix(@list) { 
     my $user = join "", $cc, $ndc, $prefix; 
     $pst1->execute($user, 1); 
     if ($rcvCarrier =~ /^$/) { 
      next; 
     } 
     if ($rcvCarrier eq $originCarrier) { 
      next; 
     } 
     $pst2->execute($user, $rcvCarrier, $portDate, 1); 
     } 
    } 
} 

sub calc { 
    my(@data) = @_; 
    my(@new) = (); 
    my(%test); 
    for my $item (@data) { 
     my($suffix) = chop($item); 
     $test{$item}{$suffix}++; 
    } 
    for my $base (keys %test) { 
     if (scalar(keys %{$test{$base}}) == 10) { 
     push @new, $base; 
     next; 
     } 

     push @new, $base.$_ for keys %{$test{$base}}; 
    } 
    if ($#new < $#data) { 
     return calc(@new); 
    } 
    return @new; 
} 
+2

«Perl Best Practices» и «Modern Perl», похоже, не согласны с руководствами. Почему мы должны пытаться применить то, что выглядит устаревшим? – choroba

+1

Я думаю, что http://codereview.stackexchange.com/ - лучший сайт для публикации этого вопроса –

ответ

3

Вы используете 3 пробела в отступе вместо продиктованных 4 пробелов.

Ваши глобальные переменные (которые, как говорят, устанавливаются config.pl), должны начинаться с буквы верхнего регистра; вам также необходимо объявить их; код в его нынешнем виде не будет компилироваться.

Смежные вопросы