Thread Reg.Ex suchen+ersetzen (17 answers)
Opened by geloescht at 2012-08-05 01:39

topeg
 2012-08-05 14:19
#160647 #160647
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
$fh Übereinkunft für ein generisches Filehandle
$! Bei Dateiaktionen steht hier die Fehlermeldung drin. Wichtig das zu wissen! Beispiel:
Code (perl): (dl )
open(my $fh, '<', $file) or die("Error open $file. Message: $!\n");



-> zugriff auf eine Referenz. Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
my @array1=(1,2,3,4,5);
my @array2=(6,7,8,9,10);
my @array3=(11,12,13,14,15);

my $referenz_auf_array1=\@array1;
my $referenz_auf_array2=\@array2;
my $kopie_von_array3_in_anonymes_array=[@array3];

print $referenz_auf_array1->[0]."\n" # gibt aus 1 wie es in array1 steht
$referenz_auf_array1->[0]=111;
print $array1[0]."\n" # gibt 111 aus da Refenz und Array zusammenhängen

print $kopie_von_array3_in_anonymes_array->[0]."\n" # gibt 11 aus
$kopie_von_array3_in_anonymes_array->[0]=1;
print $array1[0]."\n" # gibt 11 aus da Refenz und Array nicht zusammen hängen.

my @alle_arrays=($referenz_auf_array1,$referenz_auf_array2,kopie_von_array3_in_anonymes_array);

print $alle_arrays[0]->[0]."\n" # gibt 111 aus wie es in $referenz_auf_array1 und @array1 steht

# der Pfeil ist hier optional. Perl versteht es auch ohne diesen.
print $alle_arrays[0][0]."\n" # gibt 111 aus wie es in $referenz_auf_array1 und @array1 steht


$_ Ein spezielle Variable, die benutzt wird wenn eine Variable gebraucht aber nicht angegeben ist:
Code (perl): (dl )
while(<$fh>){ print }

Perl macht daraus:
Code (perl): (dl )
while($_=<$fh>){ print $_ }


2012-08-05T11:19:41 ?
Keinen schimmer, was das alles bedeuten soll.

Aber ich bin sicher, es gibt eine ausführliche schreibweise dafür?

Nunja das ist manchmal schon die ausführliche Schreibweise. ;-)

2012-08-05T11:19:41 ?
Warum müssen Profis eigentlich allen Code immer kürzen? Sind die besonders faul? *hehe*

Ja. Wenn du den ganzen Tag Programmierst dann weißt du es zu schätzen einen Problem mit 400 Zeichen zu lösen und nicht mit 10000.

2012-08-05T11:19:41 ?
Hier noch so ein "overkill":
Code (perl): (dl )
$row->[2] =~ m/pattern/ or next; # 3rd field should match

Nimm das Element 3 aus der Arrayrefenz $row und suche darin nach "pattern" wenn das nicht gefunden wurde führe next aus.
Das ist normales Perl. da ist nichts gekürzt oder verschleiert. So kann es in Perl schreiben. oder auch so:
Code (perl): (dl )
next if($row->[2] !~ m/pattern/);
oder
Code (perl): (dl )
next unless($row->[2] =~ m/pattern/);
oder
Code (perl): (dl )
next if(index($row->[2],'pattern') == -1);
oder
Code (perl): (dl )
unless($row->[2] =~ m/pattern/){next}
oder
noch viele weitere Variationen die ich nicht alle aufschreiben will.

Wenn du eine Geschwätzige Sprache nutzen willst beschäftige dich mit Java. Da gibt es nur einen richtigen Weg und alle Begriffe sind mindestens 10 Zeichen lang.

2012-08-05T11:19:41 ?
Was ich damit sagen will, und das ist wirklich nicht böse gemeint, für einen Profi mag das alles viel einfacher sein. Er kann vielleicht gar nicht verstehen, warum autodidaktische Hobbyprogrammierer manche Aufgaben lieber so, anstatt anders lösen. Was für euch umständlich wirken mag, ist für einen weniger Versierten einfacher, logischer.

Programmiersprachen sind Logisch, das müssen sie ein damit Computer sie verstehen. Wenn du nur einen Teil der Regeln kennst hast du natürlich Problem alles zu verstehen. Das ist aber keine Fehler der Programmiersprache oder der Programmierer.


2012-08-05T11:19:41 ?
Ich selber nutze nach Möglichkeit so wenig Module wie möglich. Nur wenn's gar nicht anders geht, greife ich auf eines zurück. Und dann sind das welche, wo ich genau weis, das ich das brauche und wie ich diese nutze. Ich habe eine "natürliche" Abneigung gegen Module, da ich oft nicht weiss, woher die Stammen, was drin steht, und wenn ich in den Code einsehen könnte, würde ich auch nicht genau wissen, was er denn macht. Als "Sicherheitsfanatiker" fällt es mir deshab schwer, Fremdcode zu implementieren.

Du hast zwei Möglichkeiten. Du erfindest alle Räder neu, vom Holzrad bis zum Rad eines Rennwagens. Mit allen Fehlern, die andere auch schon gemacht haben. Oder du vertraust darauf, dass andere die Fehler schon gemacht und behoben haben. Wahrscheinlich haben sie schon Fehler gemacht und behoben, von denen du gar nicht weißt das sie existieren. Es ist schön dass du alles verstehen willst, doch manchmal muss man darauf vertrauen, das andere auch etwas richtig machen. Du Programmierst ja auch nicht Perl, oder den Webserver, oder das Betriebssystem neu. Du vertraust darauf das andere keine Fehler machen. Wo ist da der unterschied zu Perl-Modulen?
Wenn Fehler auftauchen können sie korrigiert werden. Damit du dich nicht darum kümmern brauchst gibt es Distributionen, die das für dich erledigen. Schau einfach mal auf dem Webserver ob CPAN:Text::CSV schon installiert ist. Wenn ja dann achten die Betreiber darauf das die Module Fehlerfrei sind, schon aus eigenem Interesse. Das ist Arbeit, die du dir sparen kannst. Das selbe gilt für CPAN:CGI, oder andre Module, die sehr nützliche sind.
Last edited: 2012-08-05 14:28:56 +0200 (CEST)

View full thread Reg.Ex suchen+ersetzen