Schrift
[thread]7548[/thread]

Hash als Option missbrauchen (Seite 8)

Leser: 1


<< |< 1 ... 5 6 7 8 9 10 11 12 >| >> 119 Einträge, 12 Seiten
pq
 2005-12-22 13:25
#61029 #61029
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=opi,22.12.2005, 02:26]Ich habe mir auf CPAN.org einen Entwickler-Account angelegt und das
Modul hochgeladen.[/quote]
anmerkung zu test.pl:
du solltest eins der test-module benutzen (Test::Simple z.B. ist sehr einfach,
wie der name schon sagt).

der block
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  ( $net{$2}{NetRxBytes}
        , $net{$2}{NetRxPackets}
        , $net{$2}{NetRxErrs}
        , $net{$2}{NetRxDrop}
        , $net{$2}{NetRxFifo}
        , $net{$2}{NetRxFrame}
        , $net{$2}{NetRxCompr}
        , $net{$2}{NetRxMulti}
        , $net{$2}{NetTxBytes}
        , $net{$2}{NetTxPacktes}
        , $net{$2}{NetTxErrs}
        , $net{$2}{NetTxDrop}
        , $net{$2}{NetTxFifo}
        , $net{$2}{NetTxColls}
        , $net{$2}{NetTxCarr}
        , $net{$2}{NetTxCompr}
        ) = split /\s+/, $4;

ist wirklich unschön.
wie wär's mit
Code: (dl )
1
2
3
4
5
@{$net{$2}}{qw(
   NetRxBytes NetRxPackets NetRxErrs NetRxDrop NetRxFifo NetRxFrame
   NetRxCompr NetRxMulti NetTxBytes NetTxPacktes NetTxErrs NetTxDrop
   NetTxFifo NetTxColls NetTxCarr NetTxCompr
)} = split /\s+/, $4;


davon hast du noch mehr im modul.
das ist, nebenbei, auch ineffizient.\n\n

<!--EDIT|pq|1135250830-->
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
bloonix
 2005-12-22 21:18
#61030 #61030
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pq,22.12.2005, 12:25]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
        ( $net{$2}{NetRxBytes}
        , $net{$2}{NetRxPackets}
        , $net{$2}{NetRxErrs}
        , $net{$2}{NetRxDrop}
        , $net{$2}{NetRxFifo}
        , $net{$2}{NetRxFrame}
        , $net{$2}{NetRxCompr}
        , $net{$2}{NetRxMulti}
        , $net{$2}{NetTxBytes}
        , $net{$2}{NetTxPacktes}
        , $net{$2}{NetTxErrs}
        , $net{$2}{NetTxDrop}
        , $net{$2}{NetTxFifo}
        , $net{$2}{NetTxColls}
        , $net{$2}{NetTxCarr}
        , $net{$2}{NetTxCompr}
        ) = split /\s+/, $4;

ist wirklich unschön.[/quote]

Über die Schematik meines Codestils lasse ich immer gerne mit mir
verhandeln. Aber der Eine findet _das_ schön, ein Anderer _dies_ und
wieder ein Anderer _sowas_ ... wem soll ich es recht machen? :(

Am besten mir :)

[quote=pq,22.12.2005, 12:25]
davon hast du noch mehr im modul.
das ist, nebenbei, auch ineffizient.[/quote]

Du hast recht.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/perl -w
use strict;
use Benchmark;

my @array = ( 'Inter-|   Receive                                                |  Transmit'
           , ' face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed'
           , '    lo:    7897     101    0    0    0     0          0         0     7897     101    0    0    0     0       0          0'
           , '  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0'
           , '  eth0:  928792    1249    0    0    0     0          0         0   261023    1281    0    0    0     0       0          0'
           , '  dsl0:  899950    1215    0    0    0     0          0         0   226997    1169    0    0    0     0       0          0'
           );

my (%net,%sum);

Benchmark::cmpthese(-1, {
  '%net' => sub { for (@array) {
                     if (/^(\s+|)(\w+):(\s+|)(.*)/) {
                        ( $net{$2}{NetRxBytes}
                        , $net{$2}{NetRxPackets}
                        , $net{$2}{NetRxErrs}
                        , $net{$2}{NetRxDrop}
                        , $net{$2}{NetRxFifo}
                        , $net{$2}{NetRxFrame}
                        , $net{$2}{NetRxCompr}
                        , $net{$2}{NetRxMulti}
                        , $net{$2}{NetTxBytes}
                        , $net{$2}{NetTxPacktes}
                        , $net{$2}{NetTxErrs}
                        , $net{$2}{NetTxDrop}
                        , $net{$2}{NetTxFifo}
                        , $net{$2}{NetTxColls}
                        , $net{$2}{NetTxCarr}
                        , $net{$2}{NetTxCompr}
                        ) = split /\s+/, $4;

                        $sum{NetRxBytes} += $net{$2}{NetRxBytes};
                        $sum{NetTxBytes} += $net{$2}{NetTxBytes};
                     }
                  }
            },
  '@net' => sub { for (@array) {
                     if (/^(\s+|)(\w+):(\s+|)(.*)/) {
                        @{$net{$2}}{qw(
                           NetRxBytes NetRxPackets NetRxErrs NetRxDrop NetRxFifo NetRxFrame
                           NetRxCompr NetRxMulti NetTxBytes NetTxPacktes NetTxErrs NetTxDrop
                           NetTxFifo NetTxColls NetTxCarr NetTxCompr
                        )} = split /\s+/, $4;

                        $sum{NetRxBytes} += $net{$2}{NetRxBytes};
                        $sum{NetTxBytes} += $net{$2}{NetTxBytes};
                     }
                  }
            },
});

      Rate %net @net
%net 3199/s   -- -22%
@net 4110/s  28%   --

      Rate %net @net
%net 3349/s   -- -17%
@net 4036/s  21%   --

      Rate %net @net
%net 3412/s   -- -18%
@net 4148/s  22%   --


Ca. 800 Iterations mehr. Das ist im Vergleich nicht wenig.

Greez,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2005-12-22 21:32
#61031 #61031
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=steffenw,21.12.2005, 20:26](\s+|) im regulären Ausdruck ist das nicht das gleiche wie (\s*) ??[/quote]
Ja, dass ist korrekt. Ich habe es ausprobiert.

Danke für den Hinweiß ... :)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Strat
 2005-12-22 23:26
#61032 #61032
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
zum coding style: hier kann ich "Perl Best Practises" von D. Conway (O'Reilly) empfehlen. habe wegen diesem buch auch schon ein paar sachen umgestellt... dabei bin ich noch gar nicht ganz durch...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
bloonix
 2005-12-23 00:22
#61033 #61033
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Strat,22.12.2005, 22:26]zum coding style: hier kann ich "Perl Best Practises" von D. Conway (O'Reilly) empfehlen. habe wegen diesem buch auch schon ein paar sachen umgestellt... dabei bin ich noch gar nicht ganz durch...[/quote]
Hallo Strat,

ich habe gerade mal einen Blick ins 9. Kapitel des Buches bei Oreilly
geworfen, was sehr passend ist, da es sich um die Syntax etc. von
Subroutinen dreht.

Dort ist häufig dieser Codestil zu sehen ...
Code: (dl )
1
2
3
4
5
6
my $tage       = 112;
my $monate     = 223;
my $jahre      = 12432;
my $jahrzehnte = 323;

# immer schön eine Linie mit dem Gleichzeichen


Genau daran versuche ich mich zu halten.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# das sieht besser aus ...

my ( $millisekunden
   , $sekunden
   , $minuten
   , $stunden
   , $tage
   , $monate
   , $jahre
   , $jahrzehnte
   , $jahrtausende
   ) = split /\s+/, $string;

# als das ... finde ich zumindest

my ( $millisekunden, $sekunden, $minuten, $stunden, $tage, $monate, $jahre, $jahrzehnte, $jahrtausende) = split /\s+/, $string;


Schwieriger wirds bei if-elsif-else Blöcken.

Manche mögen schwer den C-Stil ...

(das vorgestellte Modul im Thread von sy_core "Modul bewerten"
war von diesem Stil stark geprägt)

Code: (dl )
1
2
3
4
5
6
if ($var1) {
  undef $var1;}
elsif ($var2) {
  undef $var2;}
elsif ($var3) {
  undef $var3;}


andere wiederrum sowas ...

Code: (dl )
1
2
3
4
5
6
7
if ($var1) {
  undef $var1;
} elsif ($var2) {
  undef $var2;
} elsif ($var3) {
  undef $var3;
}


andere das ... (bei wirklich kurzen if's schreib ich auch manchmal so)

Code: (dl )
1
2
3
    if ($var1) { undef $var1; }
elsif ($var2) { undef $var2; }
elsif ($var3) { undef $var3; }


oder das ... (dazu gehöre zum Beispiel ich)

Code: (dl )
1
2
3
4
5
6
7
8
9
if ($var1) {
  undef $var1;
}
elsif ($var2) {
  undef $var2;
}
elsif ($var3) {
  undef $var3;
}


Ich finde es einfach übersichtlicher, wenn man Anfang und Ende eines
Blocks auf gleicher Höhe sehen kann...

Code: (dl )
1
2
3
4
Anfang   if (...) {
Ende     }
Anfang   elsif (...) {
Ende     }


Und da es leider nicht zu verhindern ist, dass es viele unterschiedliche
Codestils gibt, ist es um so besser, wenn man die Fähigkeit besitzt,
den Codestils eines anderen Authors schnell zu verstehen.

Welcher if-Stil gefällt dir am besten und was nutzt du gegen dessen? :)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
steffenw
 2005-12-23 00:49
#61034 #61034
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
$millisekunden
, $sekunden

Das Komma gehört aber zu den $milisekunden
also
$millisekunden,
$sekunden,
Mache nie ein Leerzeichen vor einem Komma. Mache eins dahinter, wenn kein Zeilenumbruch erfolgt. So steht es auch im Duden.

Die zweite if ... -Schreibweise finde ich besser, weil man sonst denken könnte, so eine if ...bis... else Struktur besteht aus mehreren Blöcken. Stimmt nämlich nicht, es ist nur 1 Block. Man darf sich nicht von den {} täuschen lassen. Das merkt man dann, wenn man my-Variablen deklariert oder no warnings schreibt. Das greift dann über den ganzen Block. Das ist auch bei den Schleifen so, der Continue-Block ist nicht wirklich ein getrennter Block.\n\n

<!--EDIT|steffenw|1135292124-->
$SIG{USER} = sub {love 'Perl' or die};
bloonix
 2005-12-23 01:15
#61035 #61035
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=steffenw,22.12.2005, 23:49]
Mache nie ein Leerzeichen vor einem Komma. Mache eins dahinter, wenn kein Zeilenumbruch erfolgt. So steht es auch im Duden.
[/quote]

Da steht auch, dass man nach einem Komma ein Leerzeichen setzt.
Hälst du dich _immer_ daran?

Quote
Man darf sich nicht von den {} täuschen lassen. Das merkt man dann, wenn man my-Variablen deklariert oder no warnings schreibt. Das greift dann über den ganzen Block. Das ist auch bei den Schleifen so, der Continue-Block ist nicht wirklich ein getrennter Block.


also bei mir liefert ...
Code: (dl )
1
2
3
4
5
if (0) {
  my $var = 1;
} else {
  print "$var\n";
}


einen Fehler. Ich sehe zwei Blöcke. Allerdings liefert ...

Code: (dl )
1
2
3
4
if (my $var) {}
else {
  print ++$var, "\n";
}


keinen. $var liegt im Namensbereich vor beiden Blöcken.

Aber welchen Sinn könnte das haben?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2005-12-23 01:21
#61036 #61036
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Naja, der Duden ist für der Perl-Stil wirklich nicht bindend. Ich mache führende Kommas nur bei Sprachen, die kein optionales Komma hinter dem letzten Element erlauben (also bei allen Sprachen außer Perl).

Hier noch eine if-elsif-Variante (Anfang der Bedingung wird ausgerichtet):
Code: (dl )
1
2
3
4
if      ($bla) {
} elsif ($foo) {
} else {
}
renee
 2005-12-23 01:28
#61037 #61037
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=steffenw,22.12.2005, 23:49]$millisekunden
, $sekunden

Das Komma gehört aber zu den $milisekunden
also
$millisekunden,
$sekunden,
Mache nie ein Leerzeichen vor einem Komma. Mache eins dahinter, wenn kein Zeilenumbruch erfolgt. So steht es auch im Duden.
[...][/quote]
Damian - der hier von vielen bevorzugt wird - macht es so wie von opi beschrieben...

Ich persönlich finde eine Diskussion über Programmierstil immer etwas müssig wenn es über ein paar Grundlegende Dinge hinaus geht.

Dass man z.B. einrücken sollte ist klar, aber ob man jetzt zwei oder vier Leerzeichen oder Tabs verwendet sollte wirklich jedem überlassen werden (oder Coding Guidelines der Firma).

Vor allem ein Imperativ finde ich in den meisten Fällen eher unangebracht. Es gibt nun mal keinen wirklich vorgeschriebenen Programmierstil.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2005-12-23 01:44
#61038 #61038
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=ptk,23.12.2005, 00:21]if      ($bla) {
} elsif ($foo) {
} else {
}[/code][/quote]
ihh

...

ich gewönn mir mittlerweile den perltidy stil an!\n\n

<!--EDIT|esskar|1135295106-->
<< |< 1 ... 5 6 7 8 9 10 11 12 >| >> 119 Einträge, 12 Seiten



View all threads created 2005-12-19 02:24.