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