linux-l: array-problem in perl

Jens Dreger jens.dreger at physik.fu-berlin.de
Sa Aug 5 16:26:30 CEST 2000


On Sat, Aug 05, 2000 at 04:04:39PM +0200, Ulrich Wiederhold wrote:
> Hallo,
> folgendes dürfte wahrscheinlich ein einfaches Problem sein, ich komme
> aber nicht drauf.
> 
> Folgendes:
> #Eine Datei enthält 10 Zeilen.

Geht klar:
~> for I in `seq 1 10`; do echo $I; done > datei.dat

>  open (QUEUE, ">>$queuelocation");
>      @allqueues = <QUEUE>;
>      foreach $allqueue (@allqueues)
>        {
>        	if ($allqueue =~ /$variable/)
> 	{
>          entferne die Zeile
> 	}
>        }
> ...
> 
> das "entferne die Variable ist mein Problem. Anschließend möchte ich die
> Datei ohne die entsprechende Zeile wieder abspeichern.

Okay:
--------------8<-----------
#!/usr/local/bin/perl -w

my $variable = '5';

open( OLD, "<datei.dat" );
open( NEW, ">datei.bak" );
while(<OLD>) { print NEW unless(/$variable/); }
close(OLD);
close(NEW);
rename "datei.bak","datei.dat";
----------------8<-------------

> Gibt es nicht sowas wie "shift(@allqueues,$allqueue)" ?

Doch: grep

----------8<------------
#!/usr/local/bin/perl -w

my $variable = '5';

open( OLD, "<folge.dat" );
chomp(my @all = <OLD>);
print join('|', at all),"\n";
@all = grep { !/$variable/; } (@all);
print join('|', at all),"\n";
-----------------8<------------

Aber es ist meiner Meinung nach grober Unfug, die Datei komplett
einzulesen, wenn man danach sowieso zeilenweise drueber geht.

> P.S.: Noch ne andere kleine Frage: Wenn ich eine if Abfrage mit a = b &&
> c = d verknüpfe, entspricht das dann und, oder, oder/auch? Oder wird der
> 2. Teil nur ausgeführt wenn der 1. true ist???
> Gibt es sowas wie und, oder, oder/auch in diesem Zusammenhang???

Could you please rephrase your question ? Thanx.

Gruss,

Jens.
 
PS: es muesste natuerlich wenigstens $a==$b&&$c==$d heissen. 
    $a=$b&&$c=$d kompiliert nicht einmal (zum Glueck ;-)





Mehr Informationen über die Mailingliste linux-l