Schrift
[thread]1757[/thread]

Links für Perl-Neulinge (Seite 3)

Leser: 1


<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten
J-jayz-Z
 2005-09-22 20:28
#17597 #17597
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
könntest du das vielleicht erklären?
Aber dieser Konstruktor macht doch exakt das selbe wie:
Code: (dl )
1
2
3
4
5
6
sub new {
my $class = shift; #Klasse wird übernommen
my $self = {}; #Anonymes Hash wird erzeugt
bless $self, $class; #$self wird geblesst
return $self; #$self wird zurückgegeben
}

Oder? Was genau ist da anderst?
Ich hab ja geschrieben, wieso man das alles weglassen kann, was ist an der Erklärung falsch?
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
J-jayz-Z
 2005-09-22 20:29
#17598 #17598
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Strat,22.09.2005, 18:25]die seite gefaellt mir gut[/quote]
Danke, find ich lieb von dir, das du dir die Mühe gemacht hast, da drüber zu schauen !
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Strat
 2005-09-22 20:35
#17599 #17599
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
nein; bless mit nur einem parameter verwendet den aktuellen namensraum als klasse. solange du nicht mit vererbung arbeitest, spielt der unterschied zum bless mit zwei parametern (referenz, klasse) keine rolle

teste mal den unterschied:

mit zwei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
package MyParent;
sub new {
bless ({}, shift());
}
package MySon;
use base qw(MyParent);
sub one {
my ($self) = shift;
print "one\n";
}
package main;
my $obj = MySon->new();
$obj->one();

und mit einem:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package MyParent;
sub new {
bless {};
}
package MySon;
use base qw(MyParent);
sub one {
my ($self) = shift;
print "one\n";
}
package main;
my $obj = MySon->new();
$obj->one();
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
J-jayz-Z
 2005-09-22 20:58
#17600 #17600
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ach so, okay. So ist es mir klar geworden !
Aber mit diesem Kapitel habe ich noch nciht abgeschlossen, das werde ich auch noch erwähnen, und schreiben, das es so nur für den aktuellen Namesraum geht !
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
pq
 2005-09-22 23:25
#17601 #17601
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=J-jayz-Z,22.09.2005, 18:16]Ähm, okay. Dein Stiel ist der beste... Kann ich nicht beurteilen *gg*
Deinen Stil kannst du natürlich als den besten bezeichnen, aber nun gut :D[/quote]
ich sag nur Perl Best Practices...
ein tutorial lässt sich sicher besser schreiben, nachdem man das buch
gelesen hat.
es geht hier nicht um das, was strat am besten findet, sondern was sich
als gängige und lesbare praxis bei den meisten perlern durchgesetzt hat.
natürlich ist perl perl, auch weil man so viele freiheiten hat, aber *gerade*
wenn man anderen etwas beibringen will, sollte man wissen, was gängig
ist und was nicht.
ich habe dir ja schonmal gesagt, dass du durchaus für deine kurze lernzeit
schon sehr viel weißt, aber eben auch vieles noch nicht weißt und nicht wissen
kannst, mangels erfahrung.
so wie es jetzt ist, würde ich das tutorial nicht unbedingt empfehlen.

und wenn du sowas online stellst, wirst du immer mit kritik rechnen müssen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
J-jayz-Z
 2005-09-22 23:38
#17602 #17602
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=pq,22.09.2005, 21:25][...]und wenn du sowas online stellst, wirst du immer mit kritik rechnen müssen.[/quote]
Ich versteh die Kritik durchaus und ich weiß auch, das ich durchaus noch unteres Nivou von einigen hier im Forum bin. Aber ich persönlich habe es gern, wenn ich alles, was ich oft benutze auf einem Fleck habe. Das war eigentlich der Hauptgrund zu dieser Seite. Und ich dachte mir, das andere da mal auch schnell etwas nachschlagen könnten. . . Deshalb der link zu dieser Seite im Forum. Auch wenn man nicht unbedingt dabei etwas lernen kann...
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Strat
 2005-09-23 00:14
#17603 #17603
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=pq,22.09.2005, 21:25]es geht hier nicht um das, was strat am besten findet, sondern was sich als gängige und lesbare praxis bei den meisten perlern durchgesetzt hat.[/quote]
ich habe auch ein paar komische coding-style-eigenheiten, bei denen sich vermutlich manch anderen leuten die haare aufstellen. Wenn ich solche Sachen bei Kursen verwende, weise ich darauf hin, dass viele Leute einen anderen Weg bevorzugen, oder welche Gefahren mein Weg bietet, und dass jeder seinen eigenen Weg finden sollte.

Als Beispiel rufe ich Subroutinen, die ich selbst geschrieben habe, immer in der Form &Subroutine(...) auf, fremde hingegen immer Subroutine(...) bzw. subroutine(...). Das hat in meinen Augen folgende Vorteile:
1. Ich sehe sofort, ob eine Subroutine von mir geschrieben wurde oder jemand anderem (spielt zwar meist keine so grosse Rolle, da ich so gut wie nie [s]Namespace Pollution[/s] den Exporter benuetze, ausser vielleicht fuer irgendwelche Konstanten)
2. Da ich so gut wie nie Prototypen verwende, stoert das & auch nicht (& deaktiviert naemlich Prototypen)
3. Ich finde es logischer, analog zu $scalar, @array, %hash, &Subroutine

Gefaehrlich kann das hingegen sein, wenn man keine Parameter uebergibt und dann die Klammern weglaesst, z.B. &Subroutine. Da wird naemlich automatisch @_ der aktuellen Subroutine uebergeben, und das kann u.U. Nebeneffekte haben (ein prominentes Beispiel gab es unlaengst hier im Forum)

oder: ... or die ...
das verwende ich so gut wie nie; ich bevorzuge unless (....) { die... } , obwohl or-die perliger ist. aber ich schreibe meist groessere sachen (>10000 Zeilen), und da uebersieht man ein or-die oft schneller als einen eigenen unless-block. Aus Gruenden der politischen Korrektheit moechte ich jedoch ausdruecklich betonen , dass ich aus humanitaeren Gruenden so weit wie moeglich versuche, auf "die" zu verzichten, und - wenn moeglich - das Problem gleich zu beheben.\n\n

<!--EDIT|Strat|1127420135-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten



View all threads created 2005-09-22 15:22.