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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема реализации,изменение массива при переборе 
:(
    Опции темы
gcc
Дата 4.7.2009, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



хотел написать полезный скриптец в некотрых случаях

Код

#!/usr/bin/perl

$nn=0;

while (1) {

$nn++;

open (OPERN, "portversion |");

@all=<OPERN>;


exit if ( !$all[0] || $nn > 6 );

#@all2 = reverse (@all);

foreach (@all) {

 my ($pp,$st) = split (/ /, $_, 2);

if ($st =~ '<') {

# if ($pp =~ '^p5') {

 print "$pp\n";

  system("portupgrade -f $pp"); 
 
# }
 }
}

}


прогармма portupgrade может изменить массив @all и не целесобразно выводить его элементы

нужно как-то "на ходу" изменить массив @all


нужно как-то в цикл вставить данный код (в низу я привел пример) чтобы сравнить по новому массив и удалть те элементы которые совпадают, чтобы их не выполнять!

Код

open (OPEN2, "portversion  |");

@all_all = <OPEN2>;

    foreach my $p (@all_all) {   
    
    my ($pname,$status) = split(/ /,$p,2);

     if ($status =~ '<') { 

       push @old, $pname;
     } else {
       push @no_old, $pname;
     }

}


       my %seen;
        @seen{@all} = ();
        delete @seen{@no_old};
      my   @all = keys %seen;


и чтобы новый массив @all перебирать дальше!!!

как это реализовать логически? может как-то через goto?



Это сообщение отредактировал(а) gcc - 4.7.2009, 08:42
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 4.7.2009, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



сделал, работу не проверял

Код

#!/usr/bin/perl

$nn=0;

while (1) {

$nn++;

open (OPERN, "portversion |");

my @all=<OPERN>;

exit if ( !$all[0] || $nn > 6 );


for ($i=0;$i<@all;$i++) {
my ($pp,$st) = split (/ /, $_, 2);
if ($st =~ '<') {
$all[$i] = $pp;
}
}

while (1) {

last if !$all[0];
print "$all[0]\n";
system("portupgrade -f $pp");  # == 0 )
push @all, $all[0];
my @all = old(@all);
}
}


sub old {

my @all = @_;
    open (OPEN2, "portversion |");
my  @all_all = <OPEN2>;

my @old;
my @no_old;

    foreach my $p (@all_all) {
    
        my ($pname,$status) = split(/ /,$p,2);

        if ($status =~ '<') {
            push @old, $pname;
            } else {
         push @no_old, $pname;
         }
    }

       my %seen;
       @seen{@all} = ();
       delete @seen{@no_old};
       return keys %seen;       
}
Код





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


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

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


 




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


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

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