PurePerl »»» Implementierung von Perl in PB

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Kiffi hat geschrieben:Aber die von Dir erwähnte RegExp-Funktionalität wäre doch schon
mal ein Anfang, oder?
schonmal an pcre oder sogar an Boost gedacht ?

ts-soft hat geschrieben: Ist Perl nicht diese unleserliche Spache, wo alles bis zum Erbrechen
abgekürzt wird.
ja , grausam die Sprache :lol:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

TomS hat geschrieben: Also die Codebeispiele, die ich in Perl gesehen habe, ähneln syntaktisch sehr phpcode. Kann mich aber auch irren.
Das ist die Anfängersyntax, in Perl kann alles auch kürzer geschrieben
werden, bzw. es wird sogar meist gemacht.

Perl ist Scripting für Schreibfaule :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

edel hat geschrieben:schonmal an pcre oder sogar an Boost gedacht ?
na klar, hast Du etwa unsere romantischen Skype-Abendunterhaltungen vergessen (u.a. auch mit Delphi)? ;-)

Auch FloHimself hat uns (mir) ja ein schönes Stück Software zur Verfügung
gestellt.

<träum>
Wäre halt schön mit Perl oder PHP oder Schiess-Mich-Tot ein AllInOne-Paket
zu bekommen, mit dem man RegExp, XML, SQLite, etc. pp, erschlagen
könnte.
</träum>

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kiffi hat geschrieben:<träum>
Wäre halt schön mit Perl oder PHP oder Schiess-Mich-Tot ein AllInOne-Paket
zu bekommen, mit dem man RegExp, XML, SQLite, etc. pp, erschlagen
könnte.
</träum>

Grüße ... Kiffi
Schon mal von Do It Yourself gehört? :mrgreen:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

<delete me>
Zuletzt geändert von Thalius am 29.03.2007 18:07, insgesamt 1-mal geändert.
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

RegExp
Apropos ... jemand ne Idee wie man ne regexp unter PB-Linux checkt ? ;)
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Thalius hat geschrieben:Apropos ... jemand ne Idee wie man ne regexp unter PB-Linux checkt ? ;)
Unter Linux gibts so ziemlich genau dieselben Libs dafür, wie unter Windows
Einzige Ausnahme wäre die Delphi-Lib, die es wohl nicht für Linux gibt.
Pcre oder Boost bieten sich an, wie edel bereits erwähnte
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hallo!

Es stimmt nicht ganz, Perl ist nicht unleserlich! Ich programmiere immer mit "use strict", das entspricht in PB "EnableExplicit". Ihr seht, es wird auch an solche Sachen gedacht. Was ihr aber meint, warum Perl unleserlich sei, ist z. B. folgendes: Es ist egal ob man beispielsweise bei If-Abfragen den Operator or oder || benutzt. Ebenso gibt es drei (!) verschiedene Möglichkeiten, eine If-Abfrage zu gestalten:

Code: Alles auswählen

VARIANTE 1, normale If-Abfrage

if ($testvariable == 5)
{
     print "Fünnef";
}

VARIANTE 2, nachgestellte Bedingungen

print "Fünnef" if($testvariable == 5);

VARIANTE 3, verkürzte Schreibweise (gibt's z. B. auch in JavaScript)

print $testvariable == 5 ? "Fünnef";
(In Perl gibt's natürlich auch noch ein LSE, aber das steht hier nicht zur Debatte.)

Perl ist nicht unleserlich, es beitet dem Programmierer nur verschiedene Wege, dasselbe Ziel zu erreichen. Es hängt vom Programmierer ab, ob er sauber programmiert oder schludert. Dagegen zwingen dich ja andere Programmiersprachen, wie PB, PHP oder Delphi ja zu sauberem arbeiten, weil sie keine anderen Schreibweisen dulden (lediglich indirekt, z. B. mit PB's Macros).

Weiterer Grund, warum Perl für unleserlich gehalten wird: Perl stellt dem Programmierer viele Dinge frei, was das Arbeiten mit Perl unglaublich verschönert/versüßt/wasauchimmer. So gibt es keine Unterscheidung zwischen String, Long, Quad, etc. Es gibt nur einen Variablentyp, nämlich den "Skalar", darin können Zahlen als auch Strings gespeichert werden, wobei Perl automatisch Typenkonvertierungen (Konvertieren von String nach Long und umgekehrt) vornimmt, falls nötig.

Vergleiche:

Code: Alles auswählen

PureBasic
=========
EnableExplicit
Define a=72
Define begriff.s="Jungfrauen"
Define satz.s=Str(a)+begriff ; Manuelle Typenkonvertierung
Debug satz


Perl
=========
use strict;
my $a=72;
my $begriff="Jungfrauen"
my $satz=a.begriff; # Automatische Typenkonvertierung
print satz

> Aber die von Dir erwähnte RegExp-Funktionalität wäre doch schon mal ein Anfang, oder? Im Prinzip alles, was Perl so besonders macht und was in PB nicht oder nur schwer machbar ist.
Ich dachte z. B. an Dinge wie:
- Array an Array anhängen (gibts in Perl einen direkten Befehl dafür)
- Anzahl Felder eines Array ermitteln
- Arrays/Strings anhand eines Trennzeichens aufsplitten (StringField wäre hierfür denkbar ungeeignet), diesesn Trennzeichen kann sogar ein Leerstring sein
- Assoziateive Arrays (Hashes), das sind Arrays, auf die nicht mit Zahlen (Index 0, 1, 2...) sondern mit Namen zugrgriffen wird:


Beispiele für Assoziative Arrays (gibt's in PB nicht, da müssen wir tricksen)
PureBasic:

Code: Alles auswählen

Structure Bezug
    Name.s
    Wohnort.s
EndStructure

Dim Personen.Bezug(2)

Personen(1)\Name="Hinz"
Personen(1)\Wohnort="Norden"
Personen(2)\Name="Kunz"
Personen(2)\Wohnort="Süden"

; Hier müsste ich mittels Schleifen und Indizierungen versuchen, den Wohnort von Kunz zu kriegen
Perl:

Code: Alles auswählen

my %Personen=("Hinz" => "Norden"
              "Kunz" => "Süden");

print $Personen{"Hinz"} # Debuggen von Hinz' Wohnort
print $Personen{"Kunz"} # Und wo wohnt Kunz?

@ Kiffi:
Ich könnte auch mal versuchen, einen weiteren Thread zu öffnen, wo "Perl auf PB trifft", nicht umgekehrt wie hier. Sodass auch Perl'sche DInge in PB einfließen.



Noch ein Beispiel, für die Überlegenheit Perls bei der Bearbeitung von Strings/Zahlen:

Beispiel "Tausendertrennzeichen":

PureBasic (Anmerkung: Man muss "lästigerweise" die Zahlen selbst konvertieren!)

Code: Alles auswählen

Procedure.s StrLong(wert.q, tt.s = ".") 
  
  If wert > -1000 And wert < 1000 : ProcedureReturn Str(wert) : EndIf 
  
  Protected werts.s = StrQ(wert) 
  Protected ix.l = Len(werts) 
  Protected start.l 
  Protected ix3.l = 3 
  Protected rets.s 
  Protected sign.s 
  
  If wert < 0 : sign = "-" : start = 1 : EndIf 

  While ix > start 
    If ix3 = 0 : rets = tt + rets : ix3 = 3: EndIf 
    rets = Mid(werts, ix, 1) + rets 
    ix - 1 : ix3 - 1 
  Wend 
  
  ProcedureReturn sign + rets 
  
EndProcedure

Debug StrLong(12345678) ; Code von jear
Perl (hier entfällt die Typenkonvertierung :) )

Code: Alles auswählen

sub StrLong
{
	my $result=reverse(shift);
	my $trennzeichen=shift || ' ';
	$result =~ s/(.{3})/$1$trennzeichen/g;
	return reverse($result);
}

print StrLong(12345678) # Code von AND51
Arbeitesweise: Das in PB sieht ja jeder, wie das funktioniert. Nun zu Perl: In $result wird der 1. Parameter (die zu trennende Zahl) gespeichert, dabei aber verdreht (bidirektional notiert => 87654321).
Danach wird in der Variablen $tausendertrennzeichen der 2. Parameter gespeichert, und falls es den nicht gibt, wird stattdessen ein Leerzeichen genommen (dies ist wie in PB ein optionaler Parameter).
Danach erfolgt die Anwendung eines Regulären Ausdrucks (Kiffi, aufpassen!), hier werden jeweils drei Zeichen durch die drei Zeichen plus den Trenner ersetzt, wie erhalten also folgendes Ergebnis:
876.543.21
Dann geben wir das Ergebnis zurück, natürlich nochmals verdreht. Negative Zahlen? Brauchte ich für meine Homepage nicht, ließe sich aber leicht ergänzen.

Dies ist nur ein Musterbeispiel (PB: 14 Zeilen, Perl: 4 Zeilen). Aber genau dieses Musterbeispiel spiegelt meine Meinung wieder, warum Perl hinsichtlich der Bearbeitung von Strings PureBasic um Längen schlägt. (Nein, dieser Satz wurde nicht mit Perl erstellt! :wink: ).


Musterbeispiel 2: Erstellen eines Strings mit wiederkehrenden Zeichen:
PureBasic

Code: Alles auswählen

Debug ReplaceString(Space(100), " ", "Ich darf im Klassenraum nicht mit Papier werfen")
Perl

Code: Alles auswählen

print "Ich darf im Klassenraum nicht mit Papier werden" x100;
Hier sieht man die Einfachheit gegen über PB, den Stringmultiplikator.
" " x255;
funktioniert genauso wie
Space(255)
nur eben, dass man nicht nur Leerzeichen, sondern alle Möglichen (auch "merhzeichige") Strings nehmen kann.





Zum Schluss: Nicht das ihr denkt, ich will PureBasic bloßstellen und finde Perl viel besser. Natürlich werde ich bei PureBasic bleiben und euch auch in Zukunft noch in diesem Forum auf den Senkel gehen.
Ich dachte mir lediglich, man könne die Einfachheit von PureBasic mit der Kraft von Perl verbinden.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Perl ist nicht unleserlich, es beitet dem Programmierer nur verschiedene Wege
Ich will mir nichts beiten lassen. Allerdings bei der Rechtschreibung verstehe
ich, das Du prädestiniert für Perl bist :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

He, komm! Solche Tippfhehler können jedem mal passieren.
Aber nett, dass du Bezug auf meinen Artikel nimmst, und das auch noch sooo tiefgründig :mrgreen:

Back2Topic!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten