Сбор состояний PERL (совет нужен)

Модератор: Модераторы разделов

mancubus
Сообщения: 65
ОС: deb

Сбор состояний PERL

Сообщение mancubus »

Коллеги предположим есть строка массив состояний {idle, start, stop, idle, move, stall}
Как можно создать массив из имеющихся состояний? Пробывал так:

Код: Выделить всё

 sub errco {
    foreach $item (@eve)
          {
           if ($_[0] ne $item)
              {
               push(@tza,$_[0]);
              }
          }


Чёт не выходит каменный цветок. Судя по дебагу при определении массив в undef, туда записывается null, и при сравнении он никогда не появляется, отсюда в массив заносится весь список.
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: Сбор состояний PERL

Сообщение gcc »

что такое $_[0] ?
анонимный массив?

может быть ?

если нет, то дайте вывод

Код: Выделить всё

sub errco {
    foreach $item (@eve)
          {
  print @eve \n;
  print $item \n;
   use Data::Dumper;
  print Dumper($_[0]);

           if ($_[0] ne $item)
              {
               push(@tza,$_[0]);
              }
          }
Спасибо сказали:
mancubus
Сообщения: 65
ОС: deb

Re: Сбор состояний PERL

Сообщение mancubus »

$_[0] это переменная передаваемя функции. Сейчас попробую задампить. Ход моей мысли правельный вцелом?
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: Сбор состояний PERL

Сообщение gcc »

в функцию передается массив @_



это первый элемент
Спасибо сказали:
mancubus
Сообщения: 65
ОС: deb

Re: Сбор состояний PERL

Сообщение mancubus »

Натупил ... спасибо за мысль, пойду подкручу.
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Сбор состояний PERL

Сообщение pcodr »

gcc писал(а): ↑
11.01.2009 18:18
в функцию передается массив @_



это первый элемент


Да ну?
Массив @_ действительно содержит аргументы переданные функции. А как правильно обратиться к элементу массива в perl?
Как раз $_[0] это корректно, а @_[0] - некорректно. Попробуйте запустить такой скрипт с ключем -w, получите сообщение
(perl -w) писал(а):Scalar value @_[0] better written as $_[0]

А @_[0] - это не элемент массива, а срез массива. Но делать срез из одного элемента смысла мало, обычно пишут что-то вроде @_[0, 3, 6] или @_[0..4] и т.п.
remote system type is unix
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Сбор состояний PERL

Сообщение diesel »

mancubus писал(а): ↑
11.01.2009 17:49
Коллеги предположим есть строка массив состояний {idle, start, stop, idle, move, stall}
Как можно создать массив из имеющихся состояний?

положи их в хэш :)

типа
my %h;
foreach my $item ( @masssiv_sostoyaniy){
$h{$item} = 1
}
или
map { $h{$_} = 1 } @massiv_sostoyaniy;
map { print } keys %h . "\n";

потом в keys %h окажется список состояний....
Спасибо сказали: