Forum: PC-Programmierung Perl logische Operationen


von Robbie (Gast)


Lesenswert?

Hi

Ich möchte in einer Text Datei mit einem Perl Ausdruck bestimmte Zeichen 
finden

Der Ausdruck
1
 [^\x20-\x7F]

ignoeriert druckbare ASCII Zeichen, zeicht aber Zeilensprünge an. Diese 
möchte ich auch ausschließen. WIe bekomm ich das hin?
1
 [^\x20-\x7F] AND [^\x0A]
hat nicht funktioniert...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nun, erstens kannst du in einer character class natürlich mehrere 
Bereiche aufführen:
1
[^\x0A\x20-\x7F]

Zweitens, wenn du logische Operatoren mit Worten benutzen willst, 
brauchst du
1
use English;

Standardmäßig werden logische Operatoren wie in C benutzt: && ||

Drittens, der "englische" logische Operator für "und" heiß "and", nicht 
"AND".

Viertens, du kannst natürlich nur komplette logische Operationen 
verknüpfen, also
1
$string =~ [^\x20-\x7F] and $string =~ [^\x0A]

von leo (Gast)


Lesenswert?

Jörg W. schrieb:
> Standardmäßig werden logische Operatoren wie in C benutzt: && ||
>
> Drittens, der "englische" logische Operator für "und" heiß "and", nicht
> "AND".

Wobei 'and' usw. eine andere (kleinere) precedence haben, du kannst die 
nicht einfach austauschen.

$ perldoc perlop

leo

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

leo schrieb:
> Wobei 'and' usw. eine andere (kleinere) precedence haben, du kannst die
> nicht einfach austauschen.

Guter Hinweis - war mir nicht klar (aber als C-Programmierer bin ich 
auch kein Fan von "use English").

von leo (Gast)


Lesenswert?

Jörg W. schrieb:

Das haette ich fast ueberlesen:

> Zweitens, wenn du logische Operatoren mit Worten benutzen willst,
> brauchst du

> use English;

Nop. Das hat nichts mit 'and' zu tun.

leo

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

leo schrieb:
> Nop. Das hat nichts mit 'and' zu tun.

OK, nachgelesen, stimmt.

Dann ergänze ich: habe weder "use English" noch die englischen logischen 
Operatoren je in meinem Perl-Leben benutzt. ;-)

von leo (Gast)


Lesenswert?

Jörg W. schrieb:
> Dann ergänze ich: habe weder "use English" noch die englischen logischen
> Operatoren je in meinem Perl-Leben benutzt. ;-)

Die low-precedence logischen Operatoren sind nuetzlich, e.g. fuer 
Fehlerbehandlung.
S. 
https://stackoverflow.com/questions/1136583/what-is-the-difference-between-and-or-in-perl

leo

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Naja, es stiftet aber auch Verwirrung. Ich würde da wohl sinnvolle 
Klammerung bevorzugen. Man muss ja auch nicht unbedingt alles in eine 
Zeile quetschen, nur weil es auch in eine Zeile gequetscht werden 
kann. ;-)

(Das ist ein Phänomen, das ich durchaus auch bei manchem 
Python-Programmierer sehe.)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.