Forum Webscript.Ru

Программирование => Perl => Тема начата: C++ от 15 Апреля 2003, 22:24:26

Название: Непонятки....
Отправлено: C++ от 15 Апреля 2003, 22:24:26
Есть функция:

sub in()
{
my($digit,$array)=@_;
my $res=0;
for(my $i=0;$i<@$array;$i++)
  {
     if($digit==$$array[$i])
       {
         $res=1;
         last;
       }
  }
return($res);
}

Она проверяет входит ли элемент в список.
Но, вот не задача, передаю массив из n элементов, работает правильно она, только до 25 элемента, а дальше не находит:(
передаваемые данные 100% верны, проверял....
Заранее спасибо!
Название: Непонятки....
Отправлено: Chs от 15 Апреля 2003, 23:21:13

#!/usr/bin/perl

foreach  (1..100)
{
push @a,$_;
}

foreach  (1..100)
{
print $_.\'-\'.&in($_,\\@a)."\\n";
}


sub in()
{
my($digit,$array)=@_;
my $res=0;
for(my $i=0;$i<@$array;$i++)
  {
     if($digit==$$array[$i])
       {
         $res=1;
         last;
       }
  }
return($res);
}

---------- Perl run ----------
1-1
2-1
...
100-1
Output completed (0 sec consumed) - Normal Termination

Но я бы вообще написал $#$array или $#{$array} вместо @$array

perldoc Data::Dumper
Название: Непонятки....
Отправлено: Wyclef от 16 Апреля 2003, 07:26:49
у меня тоже все работает... я бы написал...

sub in {
    my ($digit, $array) = @_;
    for (@{$array}) {
        return 1 if $_ == $digit;
    }
    return 0; #можно опустить
}
Название: Непонятки....
Отправлено: vladsu от 16 Апреля 2003, 16:16:31
А не лучше ли это

foreach  (1..100)
{
push @a,$_;
}

заменить на это

@a = (1..100);
Название: Непонятки....
Отправлено: Chs от 16 Апреля 2003, 18:02:02
Цитировать
А не лучше...

Не принципиально, человек не спрашивал как ему лучше заполнить массив.
С дискуссиями от том как лучше это сделать - во флейм.
Название: Непонятки....
Отправлено: C++ от 16 Апреля 2003, 23:25:18
Всем огромное спасибо!!!