Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Внешние переменные (main::) в модуле


Автор: bronenos 30.12.2007, 10:21
Скажите, что не так...
Фунцкия, из модуля jskit
Код

sub parseRequest
{
  my ($this, $in) = @_;

  print $in, ": ", ref $in, "\n"; /* Показывает в распечатке "::" */

  if (ref $in eq "HASH")
  {
    my %in = %{$in};
    $in{parseRequest($_)} = parseRequest($in{$_}) foreach (keys %in);
    return %in;
  }
  elsif (ref $in eq "ARRAY")
  {
    my @in = @{$in};
    for (my $i=0; $i<scalar(@in); $i++)
    {
      $in[$i] = parseRequest($in[$i]);
    }
    return @in;
  }
  elsif (!ref $in)
  {
    $in =~ s/%([a-z0-9]{2})/pack("C", hex($1))/eig;
    return $in;
  }
}


Вызов (из фунцкии того же модуля, jskit)
Код

my %P = parseRequest(%main::P);

%P - мой массив POST, писал руками (CGI не подходит по реализации), в остальных программах работает наура

Автор: Bikutoru 6.2.2008, 11:46
Судя по коду функция ожидает два параметра $this (судя по названию, это должна быть ссылка на вызывающий объект) и  $in (по логике массив с входными данными). При вызове функции передается хеш, который трактуется как массив входных параметров и получается, что при вызове в $this находится ключ первого элемента хеша, а в $in - значение первого элемента хеша. По логике, вызов должен быть примерно таким:
Код

my %P = $obj->parseRequest(\%main::P);

Автор: nitr 9.2.2008, 00:26
Думаю, Bikutoru, прав, и чтобы заработало можно исправить строчку

Код
my ($this, $in) = @_;

на
Код
my ($in) = @_;

Автор: tishaishii 14.2.2008, 15:45
Код
parseRequest('main::P')

Код
my$in=shift;

Автор: nitr 14.2.2008, 20:54
tishaishii, думаю это и так многим понятно, надеюсь и создателю темы.
Хоть shift, хоть $_[0], хоть @_ , можно my $in, а можно my ($in) smile Все от ситуации.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)