Feedback

Thank you. Your feedback has been sent.

Russian Federation: Discussions Perl Forum - Hallo, Discussions, exchange of ideas, controversies, opinions

Forum > Perl Forum > Thread
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Hallo
Posted on: 26.01.2006 13:49

guten Tag an alle ; ich habe ein Problem einDatei mit Perl automatischzu erstellen; ich bin zwar ein Anfänger was diese Sprache angeht; mein Datei sieht so aus :

case AR-BASE CAE-PACK EMS-PACK
1 0 0 0
2 0 1 1
3 ~0 0 0
4 ~0 1 1



ich möchte jeweils pro zeile Jedes Dezimal Zahl in einer Variable speichern und dafür habe zuerst die Datei geöffnet und iteriere über die Ganze Datei und mache ein "Match" leider funktioniert es nicht richtig ! wo ist das Problem in meinem Code ?

my $dossier= "/home/blabla/datei.txt";

open(ENTREE,"$dossier")or die "can't open this File $!";
while(){
chomp;
if(m/(^?d{1,})(.d?)(.[0-1]{1})([^~]d{1})/g){
dann mag etwas !!!

}
}

ich würde micht freuen falls irh mir weiter helfen würdest !!

Gruss.

Grad

Reply
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Hallo
Posted on: 26.01.2006 14:54

Implizit mit $_ zu arbeiten ist kewl und l@Et aber oft schlecht lesbar. Explizite Variablen sind lesbarer.
Die Fragestellung ist nicht ganz eindeutig. Das gewünschte Ergebnis anzugeben wäre hilfreich gewesen.

- Ich denke im Match fehlt die Erkennung der Spaces/Tabs/Whitespaces.
- mit (.\d?) ist eventuell (\.\d+)? gemeint ? (Leer) (.1) (.2) (.3) (.123) .12345 .39827208202...3292 Punkte sind mit \. zu escapen. Ein "?" gilt soweit ich weiss nur für das letzte also nur für "\d" und nicht für "\.\d".

Empfehlung: Nimm split und verarbeite dann die einzelnen Array-Elemente.
while(my $line = *ENTREE*) { # Was mit *ENTREE* gemeint ist weisst Du hoffentlich: (ENTREE) [ENTREE] mit spitzzen Klammern
my(@arr)=split /\s+/, $line ;
(@arr)=grep { m/^\d+(\.\d+)?$/ } (@arr)
# Mach hier was mit den Elementen von @arr
...
}

Noch etwas aber nur für die Forenbetreiber: Die werden im Forum ungünstig verarbeitet. Daher habe ich das while(*ENTREE*) falsch gelesen. Sowas ist im ungüstigsten Fall eine Sicherheitslücke womit man in Foren böses HTML [embed href="boese website/boese sachen ]" unterbringen kann.


Geändert am 26.01.2006 15:18 von Peter Böckmann
Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Frage
Posted on: 26.01.2006 16:45

Hallo an alle !

ich habe eine Frage .

wie erstellt man eine Datei automatisch in Perl ; zum beispiel der folgende Befehl ist es im Perl ein Verzeichnis zu erstellen:

mkdir "blablaa",0755;

wie es mit dem Datei ?

danke !!
Reply
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Frage
Posted on: 26.01.2006 17:26

> wie erstellt man eine Datei automatisch in Perl ; zum beispiel der folgende Befehl ist es im Perl ein Verzeichnis zu erstellen:
>
> mkdir "blablaa",0755;
>
> wie es mit dem Datei ?

Siehe:
perldoc -f open
perldoc FileHandle

open OUTFileHandle, '>outfile.txt' or die "ERROR open(>outfile.txt): $! " ;
print OUTFileHandle "Blabla $abc $defn" ;

oder FileHandle nutzen:
use FileHandle;
...
my $outFH = new FileHandle '>outfile.txt' or die "ERROR new FileHandle(>outfile.txt): $! " ;
print $oufFH "Blabla $abc $defn" ;
printf $outFH "%d Einträge in Arrayn", scalar(@array) ;

Kein Komma sondern Leerzeichen zwischen print und FileHandle und dem was zu printen ist.
FALSCH: print OUTFileHandle , "abcden" ;


>foobar.txt erzeugt eine neue Datei bzw. macht eine vorhandene Datei leer und fängt vorne an
>>foobar.txt (mit zwei Größer-Zeichen) hängt an eine Datei hinten dran (oder erzeugt die Datei neu).

PS: Für Anfänger:
use warnings ;
use strict;
use diagnostics;
einschalten und immer lieb und brav programmieren.

Evtl.
perldoc diagnostics
perldoc strict
perldoc warnings
lesen und Teile davon verstehen (wenn man 90% nicht versteht ist auch nicht schlimm)

PPS: Python wäre für Anfänger deutlich besser geeignet.

Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Re: Re: Frage
Posted on: 30.01.2006 15:55

Hallo !
danke sehr fuer die Hilfe ; mein Script funktioniert jetzt; ich habe ganz normal die Funktion open benutzt;

ich habe nach dem Perlmodule "FileHandle" gelesen und verstehe leider nicht so gut was dieses Modul macht !!

kann mir eine das erklaeren was das macht , und am besten mit einem Beispiel ?

Gruss.

Grad
Reply
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Re: Re: Frage
Posted on: 30.01.2006 19:25

jordan koungan schrieb am 30.01.2006 um 15:55:
> Hallo !
> danke sehr fuer die Hilfe ; mein Script funktioniert jetzt; ich habe ganz normal die Funktion open benutzt;
> ich habe nach dem Perlmodule "FileHandle" gelesen und verstehe leider nicht so gut was dieses Modul macht !!

> kann mir eine das erklaeren was das macht , und am besten mit einem Beispiel ?

Ist für den Anfang aber nicht so wichtig. Kurz: Mit FileHandle kann man ordentlicher die FileHandles organisieren und besser Fehler vermeiden als mit den globalen Handles.
Die perldoc-Dokumente sind für die meistgenutzten Module oft sehr gut.

perldoc FileHandle
liefert:
############################ schnipp
NAME
FileHandle - supply object methods for filehandles
SYNOPSIS
use FileHandle;

$fh = new FileHandle;
if ($fh->open("< file")) { print ;
$fh->close; }

$fh = new FileHandle "> FOO";
if (defined $fh) { print $fh "barn";
$fh->close; }

$fh = new FileHandle "file", "r";
if (defined $fh) { print ;
undef $fh; # automatically closes the file
}
... und so weiter...
##################################### schnapp

Du kannst damit FileHandles nicht als globale FOO, BAR, OUTFILE,... Variablen speichern sondern in Variablen die dann lokal sein können. Das hat manchmal Vorteile weil man z.B. nicht aufpassen muss, das die Namen nicht kollidieren. Beispiel: Man will in einer Funktion/sub-Routine etwas loggen. Wenn man das in mehreren Funktionen/Prozeduren/subRoutinen macht und jedesmal LOG nimmt oder LOG1, LOG2,... kommt man durcheinander.

Besser versteht man es beim Modul DirHandle: Lokale DirHandles in lokalen Variablen sind sehr nützlich, wenn man Verzeichnissstrukturen durchwandert. Bei opendir DHANDLE, $dirname; hat man nur ein DHANDLE.


Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: : Re: Frage
Posted on: 03.02.2006 16:08

Hallo an alle ; meine Frage ist leider noch nicht vollstaendig geklaert , ich verstehe den volgenden Kode eigentlich noch nicht ganz, es liegt sicherlich daran ,dass ich Anfaenger beim Perl bin , kann mir ganz genau erklaeren was es genau macht?
bitte weiter ganz unten nach dem Kode weiter lesen.....

perldoc FileHandle
liefert:
############################ schnipp
NAME
FileHandle - supply object methods for filehandles
SYNOPSIS
use FileHandle;

$fh = new FileHandle;
if ($fh->open("< file")) { print ;
$fh->close; }

$fh = new FileHandle "> FOO";
if (defined $fh) { print $fh "barn";
$fh->close; }

$fh = new FileHandle "file", "r";
if (defined $fh) { print ;
undef $fh; # automatically closes the file
}

also , so weit ich verstehe, mit $fh = new FileHandle, erzeuge ich ein neues Element von typ FileHandle
mit $fh->open"/home/.../fichier_$casenr.txt");
print OUTPUTFILE "$filen";
close(OUTPUTFILE

Ich freue mich im Voraus auf Ihre Hilfe .

Liebe Gruesse

Grad

Reply
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Frage
Posted on: 04.02.2006 10:08

> also , so weit ich verstehe, mit $fh = new FileHandle, erzeuge ich ein neues Element von typ FileHandle
> mit $fh->open"neueDatei.txt" or die "ERROR...: $! ";
Mit dem Kleiner-Zeichen < oder ohne das Zeichen liest man ein.
perl -> fichier Also ">"
perl <- File also <

Man kann bei $fh->open oder =new FileHandle... fast alles angeben was bei open
geht. Gaengig sind:
$fh->open( "/foo/bar/$abc.txt" ) ; # Datei lesen
$fh->open(">foo/bar/$filename") ; # Datei erzeugen und von Anfang an schreiben
$fh->open(">>$filename") ; # An die Datei dranhaengen
Dann gibt es noch das Pipesymbol um andere Programme aufzurufen und denen
etwas reinzupipen oder deren Output auszulesen.


> kann ich ich ander stelle von "file" einen ganzen Path eingeben ? Z.B: /home/blablabla/datei.txt?

Ja. Haettest Du aber auch selber ausprobieren koennen.


Da fehlt der passende Kontext.
FileHandle ist besser, wenn man mehrere Dateien schreiben will UND dabei
nicht staendig mit open und close die Handles auf- und zumachen will.
Beispiel: Vemrutlich sind Tipp-Fehler drin. Nicht mit Perl getestet.

my @fhArray=() ;
foreach my $case (1..10) {
# FileHandle in einem Array-Element speichern:
$fhArray[$case] = new FileHandle ">/foo/bar/baz_$case.txt" or die "Error open(...):$! " ;
}

blabla code

while( ...code ... ) {
if(...blabla...) {
print $fhArray[3] " blabla Case 3n" ;
} elsif(...) {
$case=...blabla... ;
print $fhArray[$case] "Case for ... is $casen" ;
}

}

Mit den Filehandles in Hashes geht es auch. Das mache ich haeufiger.
Zur Bequemlichkeit sollte man dann aber subs benutzen.

Hier ist eher kein Perl-Anfaenger-Forum. Evtl gibt es Newsgruppen und
vermutlich sogar franzoesischsprachige falls Dir das lieber sein sollte.

Reply
View profile
Private message
Manfred Schmitz


Date of registration: 24.08.2004
Postings: 504
City:


Subject: Re: : Re: Frage
Posted on: 06.02.2006 14:52

Machst Du das ganze für eine Web-Anwendung?
Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Re: Re: : Re: Frage
Posted on: 11.02.2006 13:54

ja genau ! es ist für eine Webanwendung !

eine Frage habe ich !


Reply
Private message
Manfred Schmitz


Date of registration: 24.08.2004
Postings: 504
City:


Subject: Re: Re: Re: : Re: Frage
Posted on: 11.02.2006 22:32

> eine Frage habe ich !

Was denn für eine?
Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Re: Re: Re: Re: : Re: Frage
Posted on: 17.02.2006 12:45

Hallo !

ich habe eine Frage ; zwar habe ich ein Perl modul geschrieben und habe das modul in dem selben Verzeinis mit dem perl Script ,dass das Modul benutzt ... leider bekomme ich folgende Fehler :
Can't locate Mein_modul.pm in @INC (@INC contains: /vrcom/homestud/ngouni/Grado_Exo/Boulot/Vrcom/modulen_Grad/ /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at script_lisenceprefs.pl line 8.
BEGIN failed--compilation aborted at script_meinmodul.pl line 8.

wie kann ich zu meinem Script sagen wo es das Modul finden wird ?
weil ich kein zugriff auf den Verzeichnisse ,die in dem array @INC aufgelistet sind habe.

wie muss ich mein perl script bitte ergänzen damit es funktioniert ?

danke im voraus .

Gruss

Reply
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Re: Re: Re: Re: : Re: Frage
Posted on: 17.02.2006 12:54

jordan koungan schrieb am 17.02.2006 um 12:45:
> Hallo !
>
> ich habe eine Frage ; zwar habe ich ein Perl modul geschrieben und habe das modul in dem selben Verzeinis mit dem perl Script ,dass das Modul benutzt ... leider bekomme ich folgende Fehler :
> Can't locate Mein_modul.pm in @INC (@INC contains: /vrcom/homestud/ngouni/Grado_Exo/Boulot/Vrcom/modulen_Grad/ /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at script_lisenceprefs.pl line 8.
> BEGIN failed--compilation aborted at script_meinmodul.pl line 8.
>
> wie kann ich zu meinem Script sagen wo es das Modul finden wird ?
> weil ich kein zugriff auf den Verzeichnisse ,die in dem array @INC aufgelistet sind habe.
>
> wie muss ich mein perl script bitte ergänzen damit es funktioniert ?

#! ... perl ...
...
use File::Basename; # Enthält basename() und dirname()
my $scriptDir=dirname($0) ;

Reply
View profile
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Re: Re: Re: Re: : Re: Frage
Posted on: 17.02.2006 12:55

jordan koungan schrieb am 17.02.2006 um 12:45:
> Hallo !
>
> ich habe eine Frage ; zwar habe ich ein Perl modul geschrieben und habe das modul in dem selben Verzeinis mit dem perl Script ,dass das Modul benutzt ... leider bekomme ich folgende Fehler :
> Can't locate Mein_modul.pm in @INC (@INC contains: /vrcom/homestud/ngouni/Grado_Exo/Boulot/Vrcom/modulen_Grad/ /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at script_lisenceprefs.pl line 8.
> BEGIN failed--compilation aborted at script_meinmodul.pl line 8.
>
> wie kann ich zu meinem Script sagen wo es das Modul finden wird ?
> weil ich kein zugriff auf den Verzeichnisse ,die in dem array @INC aufgelistet sind habe.
>
> wie muss ich mein perl script bitte ergänzen damit es funktioniert ?

#! ... perl ...
...
use File::Basename; # Enthält basename() und dirname()
my $scriptDir=dirname($0) ; # $0 ist meist (nicht immer) der Dateiname des Scriptes
use lib $scriptDir ;


Reply
View profile
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Re: Re: Re: Re: : Re: Frage
Posted on: 17.02.2006 13:07

jordan koungan schrieb am 17.02.2006 um 12:45:
> Hallo !
>
> ich habe eine Frage ; zwar habe ich ein Perl modul geschrieben und habe das modul in dem selben Verzeinis mit dem perl Script ,dass das Modul benutzt ... leider bekomme ich folgende Fehler :
> Can't locate Mein_modul.pm in @INC (@INC contains: /vrcom/homestud/ngouni/Grado_Exo/Boulot/Vrcom/modulen_Grad/ /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at script_lisenceprefs.pl line 8.
> BEGIN failed--compilation aborted at script_meinmodul.pl line 8.
>
> wie kann ich zu meinem Script sagen wo es das Modul finden wird ?
> weil ich kein zugriff auf den Verzeichnisse ,die in dem array @INC aufgelistet sind habe.
>
> wie muss ich mein perl script bitte ergänzen damit es funktioniert ?

Ich mache das so (nicht getestet, aus dem Kopf getippt). Dann spare ich mir, ständig absolute Filenamen in Scripten anpassen zu müssen. Wenn man bei einem Webserver-Umzug in 20 cgi-Perl-Scripten machen muss, weiss man, wer schlau und wer dumm programmiert.

#! ... perl ...
...
use File::Basename; # Enthält basename() und dirname()
my $scriptDir=dirname($0) ; # $0 ist meist (nicht immer) der Dateiname des Scriptes
use lib $scriptDir ; # siehe / perldoc lib /
use Mein_modul ;

Noch kürzer:
use File::Basename ;
use lib dirname($0) ;
use Mein_modul ;
...

Ein ähnliches Problem: Es ist ein bestimmtes Modul nicht installiert, das man braucht.
Das kann man mit " LocalModInstall " lösen. Vermutlich gibt es das bei www.cpan.org irgendwo. Es ist kein Modul sondern ein Script. Damit kann man Modul-Pakete in in eigene Verzeichnisse installieren. Auch muss man dann bestimmte ENVironment-Variablen setzen, damit es läuft. Da muss man etwas aufpassen und macht vermutlich versehentlich Anfänger-Fehler, aber es funktioniert und man muss die Administratoren nicht anbetteln, ein Modul zu installieren.

Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Danke sehr für die Hilfe
Posted on: 17.02.2006 13:31

Hallo !

ich möchte nur viel mas für die Hilfe danke ; ich habe zwar vorkurzem folgendes code geschrieben


use lib '/.../modulpath/'';
oder mit der methode unshift @INC,/.../modulpath ;

aber den weg ,dass sie mir gezeigt haben ist schlauer ..

danke noch mal ....

Gruss

Grad

Reply
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Frage !
Posted on: 24.02.2006 14:49


Guten Tag an alle !

Ich habe mal eine Frage ,; ich arbeite an einem Testsystem ,dass mit Perl gemacht ist ; leider ist ein stueck von dem Kode die ich nicht genau verstehe was das genau sein soll zwar :


%Message =(
I_VAR =>`%%1 = "%%2" `,
W_ANA_FAD => ` function `%%` already defined ',
I_MEA_VAR => ` %%1_[%%2] = "%%3 (%%)` ,
);

meine Frage ist wie sollte man verstehen wie diesen hash definiert ist ? was macht das doppelt prozent ?
wie soll man die jeweilige Scluessel von diesen Hash verstehen ???


Danke im voraus fuer jede Hilfe .

Gruss.

Grad
Reply
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Frage !
Posted on: 25.02.2006 17:21

> meine Frage ist wie sollte man verstehen wie diesen hash definiert ist ? was macht das doppelt prozent ?
> wie soll man die jeweilige Scluessel von diesen Hash verstehen ???

$foo{"abc"}=123;
print $foo{'abc'} ."n";
print $foo{abc}."n" ;
zeigen, das die Keys auch ohne ' oder " geschrieben werden können. Bei Zahlen als Keys wäre ich aber vorsichtig. foo{1.0} ist vielleicht nicht dasselbe wie foo{1}. Ich habe es aber nicht getestet.
Das andere sieht suspekt aus, wegen der backticks :`: . Das würde eigentlich Programme aufrufen:
print `ls -l` ;
my $foo = `df -m ` ;
Ich vermute, Du hast es abgetippt und nicht so genau darauf geachtet.

Wegen % siehe normalerweise (hier aber wohl nicht) " perldoc -f sprintf " . Ich vermute, das es sich um irgendein Templating-System handelt und man mit %%2 an das zweite Argument kommt und es dann beliebig in der Ausgabe(dem Template) positionieren kann und nicht gezwungen wird, sich an die Reihenfolge zu halten. Du könntest I_VAR , W_ANA_FAD und I_MEA_VAR in den quelltexte suchen und schauen, wie die benutzt werden:
Unter Unix:
fgrep -l I_VAR *
fgrep -lr I_VAR . (Durchsucht diesen Ordner und alle Files in allen Unterordnern nach 'I_VAR' )
Das '-l' ist ein kleines L und listet die Files, statt die Fundstellen anzuzeigen. Du kannst es auch weglassen. Dann gibt es mehr zu sehen.

Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Danke für die Hilfe
Posted on: 28.02.2006 18:03



Hallo !

Ich möchte mich sehr für die Hilfe bedanken.

Gruss

Grad
Reply
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Re: Danke für die Hilfe
Posted on: 06.03.2006 18:59

Guten Tag an alle ;

ich habe eine Frage ; zwar :
wenn man eine Liste definiert hat,
gibt es eine Funktion in Perl ; die zurückgibt, ob irgend einem Element in der Liste definiert ist oder nicht ?



gruss.

Grad
Reply
Private message
Peter Böckmann


Date of registration: 07.07.2005
Postings: 340
City: Rees


Subject: Re: Danke für die Hilfe
Posted on: 07.03.2006 15:53

> ich habe eine Frage ; zwar :
> wenn man eine Liste definiert hat,
> gibt es eine Funktion in Perl ; die zurückgibt, ob irgend einem Element in der Liste definiert ist oder nicht ?

Mit 'Liste' sind meist wohl Array gemeint. Da nicht ganz klar ist, was gefragt ist, eine allgemeinere Antwort.

Bei einem Hash gibt es defined() und exists() . Bei einem Array auch. exists() und defined() sind leicht unterschiedlich. Siehe perldoc -f defined und perldoc -f exists .

Hashes:
my %foo=...; ...
if( not (defined $foo{'username'}) ) { print "Kein Username wurde angegeben"; }

Arrays:
my @umsatz=...; ...
if(not (defined $umsatz[$i]) ) { print "Kein Umsatz für Monat $i"; }

Bei einem Array muss man vielleicht mit grep arbeiten (perldoc -f grep ) wenn Du z.B. ein bestimmtes Wort suchst . Vielleicht gibt es Module mit Hilfsfunktionen dafür, aber das weiss ich nicht.

my(@found)=grep { $_ eq 'Meier' } (@foo) ;
if(scalar(@found)>0) { print "Meier wurde in foo-Array gefunden"; }

PHP hat für solcherlei Sachen einiges mehr an Bequemlichkeits-Funktionen. Statt Hashes haben die Maps und das sind in PHP (nicht unbedingt auch in anderen Programmiersprachen) zwei parallele Listen was oft Vorteile bietet.

Reply
View profile
Private message
jordan koungan


Date of registration: 26.01.2006
Postings: 12
City: Darmstadt


Subject: Re: Re: Danke für die Hilfe
Posted on: 12.03.2006 14:53

danke Sehr für Die Hilfe;

sie haben mir sehr weiter geholfen .

einen schönen Sonntag wünsche ich Ihnen .

Gruss.

Grad
Reply
Private message
Renée Bäcker


Date of registration: 30.05.2006
Postings: 3
City: Riedstadt


Subject: Re: Re: Re: Re: Re: Re: : Re: Frage
Posted on: 25.09.2006 13:09

Peter Böckmann schrieb am 17.02.2006 um 13:07:
>
> #! ... perl ...
> ...
> use File::Basename; # Enthält basename() und dirname()
> my $scriptDir=dirname($0) ; # $0 ist meist (nicht immer) der Dateiname des Scriptes
> use lib $scriptDir ; # siehe / perldoc lib /
> use Mein_modul ;
>
> Noch kürzer:
> use File::Basename ;
> use lib dirname($0) ;
> use Mein_modul ;
> ...
>


Noch besser:

use FindBin ();
use lib $FindBin::Bin;
use Mein_modul;
Reply
Private message
Renée Bäcker


Date of registration: 30.05.2006
Postings: 3
City: Riedstadt


Subject: Re: Re: Danke für die Hilfe
Posted on: 25.09.2006 13:13

Peter Böckmann schrieb am 07.03.2006 um 15:53:
> > ich habe eine Frage ; zwar :
> > wenn man eine Liste definiert hat,
> > gibt es eine Funktion in Perl ; die zurückgibt, ob irgend einem Element in der Liste definiert ist oder nicht ?
>
> Mit 'Liste' sind meist wohl Array gemeint. Da nicht ganz klar ist, was gefragt ist, eine allgemeinere Antwort.
>
> Bei einem Hash gibt es defined() und exists() . Bei einem Array auch. exists() und defined() sind leicht unterschiedlich. Siehe perldoc -f defined und perldoc -f exists .
>
> Hashes:
> my %foo=...; ...
> if( not (defined $foo{'username'}) ) { print "Kein Username wurde angegeben"; }

würde man besser als
unless(defined $foo{username}){
...
}

schreiben

>
> Arrays:
> my @umsatz=...; ...
> if(not (defined $umsatz[$i]) ) { print "Kein Umsatz für Monat $i"; }

Hier ebenso

>
> Bei einem Array muss man vielleicht mit grep arbeiten (perldoc -f grep ) wenn Du z.B. ein bestimmtes Wort suchst . Vielleicht gibt es Module mit Hilfsfunktionen dafür, aber das weiss ich nicht.
>
> my(@found)=grep { $_ eq 'Meier' } (@foo) ;
> if(scalar(@found)>0) { print "Meier wurde in foo-Array gefunden"; }
>

kann man auch so schreiben:
if(grep{$_ eq 'Meier'}@foo){...}

Oder mit List::MoreUtils;

use List::MoreUtils;
if(any{$_ eq 'Meier'}@foo){...}

> PHP hat für solcherlei Sachen einiges mehr an Bequemlichkeits-Funktionen. Statt Hashes haben die Maps und das sind in PHP (nicht unbedingt auch in anderen Programmiersprachen) zwei parallele Listen was oft Vorteile bietet.
>

zum Beispiel?
Reply
Private message


1

Similar threads: