perl: foreach() a dalsi polozka

Petr Baudis pasky na pasky.ji.cz
Úterý Srpen 14 21:46:52 CEST 2001


> (V @file je spousta radku textu.)
> 
>    foreach (@file)
>    {
>       if(nejakapodminka)
>       {
>          DelejNeco1($_);
> # >>>>>  Vezmi dalsi polozku
>          DelejNeco2($_);
>       }
>       else
>       {
>          DelejNecoJineho($_);
>       }
>    }
> 
> Takze pokud plati 'nejakapodminka' tak potrebuju na aktualni radek
> postvat funkci DelejNeco1() a na hned dalsi radek funkci DelejNeco2().
> Pokud podminka neplati (coz je vetsina pripadu), tak to s kazdym radke
> udela DelejNecoJineho().
> 
> Na miste oznacenem '>>>>>' potrebuju z @file dostat dalsi radek do $_
> (nebo do jine promenne). Uz nad tim badam celkem dlouho a neprisel jsem na
> to jak to udelat :-(((
Ja bych si na to udelal proste kontrolni promnenou:

  $Neco2 = 0;
  foreach (@file) {
    if ($Neco2) {
      DelejNeco2($_);
      $Neco2 = 0;
    }
    
    if (podminka) {
      DelejNeco($_);
      $Neco2 = 0;
    } else {
      DelejNecoJineho($_);
    }
  }

ci pokud to chcete univerzalnejsi, efektnivnejsi, hnusnejsi a vice 31337:

  $action = "DelejNecoJineho($ln);";
  foreach $ln (@file) {
    if (podminka) {
      DelejNeco($ln);
      $action = "DelejNeco2($ln);";
    } else {
      eval($action);
      $action = "DelejNecoJineho($ln);";
    }
  }
  
nejsem si ted jisty jestli se $_ pri eval() nemeni nejak, proto pouzivam $ln,
ale nemelo by se.

-- 

				Petr "Pasky" Baudis
.                                                                       .
#define BITCOUNT(x)     (((BX_(x)+(BX_(x)>>4)) & 0x0F0F0F0F) % 255)
#define  BX_(x)         ((x) - (((x)>>1)&0x77777777)                    \
                             - (((x)>>2)&0x33333333)                    \
                             - (((x)>>3)&0x11111111))
             -- really weird C code to count the number of bits in a word
.                                                                       .
My public PGP key is on: http://pasky.ji.cz/~pasky/pubkey.txt
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d- s++:++ a--- C+++ UL++++$ P+ L+++ E--- W+ N !o K- w-- !O M-
!V PS+ !PE Y+ PGP+>++ t+ 5 X(+) R++ tv- b+ DI(+) D+ G e-> h! r% y?
------END GEEK CODE BLOCK------


Další informace o konferenci Linux