Schrift
[thread]7548[/thread]

Hash als Option missbrauchen (Seite 6)

Leser: 1


<< |< 1 ... 3 4 5 6 7 8 9 ... 12 >| >> 119 Einträge, 12 Seiten
renee
 2005-12-21 02:08
#61009 #61009
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das hat nix mit dem < zu tun, sondern damit, dass Du versuchst $_ zu verändern, was Du aber nicht darfst...

Den gleichen Effekt hast Du, wenn Du folgendes Programm ausführst:
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;

for (qw/SysInfo/) { # nur zum Testen
$_ = 'test';
}
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/
bloonix
 2005-12-21 02:16
#61010 #61010
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
klar, der Wert in der foreach-Schleife ist konstant, aber dort versuche
ich ja nicht $_ zu ändern, sondern erst in der while-Schleife. oder irre
ich mich da?
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.
renee
 2005-12-21 02:50
#61011 #61011
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In der Subroutine ist $_ erstmal gesetzt (kannst Du mit einem print $_ vor der while-Schleife testen). Und dann versuchst Du im Schleifenkopf $_ zu verändern...
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/
bloonix
 2005-12-21 03:56
#61012 #61012
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hi,

ich hab mich mal getraut ...

LinuxStatistics.pm

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.
esskar
 2005-12-21 04:47
#61013 #61013
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=opi,21.12.2005, 02:56]LinuxStatistics.pm[/quote]
zumindest schön programmiert. also rein optisch,
wenn ich wieder nüchtern bin, zerreiß ich es ;)
bloonix
 2005-12-21 04:54
#61014 #61014
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=esskar,21.12.2005, 03:47][quote=opi,21.12.2005, 02:56]<a href="http://www.bloonix.de/LinuxStatistics.html" target="_blank">LinuxStatistics.pm</a>[/quote]
zumindest schön programmiert. also rein optisch,
wenn ich wieder nüchtern bin, zerreiß ich es ;)[/quote]
oh je, ich bereue es schon! :)

du bist auch noch auf? geburtstag gefeiert?
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.
esskar
 2005-12-21 04:56
#61015 #61015
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=opi,21.12.2005, 03:54]du bist auch noch auf? geburtstag gefeiert?[/quote]
OT:
jep... komm grad aus'm "Blau" nach hause.
war gut. hab grad noch ne suppe gegessen, und leg mich jetzt aus's ohr... bis morgen nachmittag :)
bloonix
 2005-12-21 21:19
#61016 #61016
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo zusammen,

ich habe das Modul nochmal ein wenig auf den Kopf gestellt und eine
Methode namens new hinzugefügt. Ich habe bisher noch nicht viel mit
OO zu tun gehabt. Ist die Methode so ok?

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
sub new {
  my $Class = shift;
  my %Param;

  if (ref $_[0] eq 'HASH') {
     %Param = %{$_[0]};
  }
  elsif (@_ & 1) {
     die 'Statistics: not enough arguments ...';
  }
  else {
     %Param = @_;
  }

  for (keys %Param) {
     die "Statistics: invalid argument $_"
        unless /^(SysInfo|ProcStats|MemStats|PgSwStats|NetStats|SockStats|DiskStats|DiskUsage|LoadAVG|Processes|TimePoint)$/;
  }

  my $Self = bless(\%Param,$Class);

  return $Self;
}

sub getStats {
  my $Param = shift;
  my $Class = shift;

  ...
  ...
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-21 21:26
#61017 #61017
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Es lohnt sich, Perl komplett zu erlernen. Es lohnt sich auch, zu versuchen, Module der Perl-Autoren im CPAN zu verstehen. Ich meine die Source. Es sollten aber welche sein, die noch handlich von der Größe sind. Damian Conway-Module sind da vielleicht ein Tip.

Dein Modul ist recht ordentlich gebaut. Aber das willst Du sicher nicht wissen, sondern was man noch anders machen könnte.

Code: (dl )
1
2
3
4
$stats->{'ProcStats'}->{'ProcUser'}
...
my %file = (
'passwd' => '/etc/passwd', # den key meine ich hier

ist für mich übertrieben gequotet. {} quotet schon Hashkeys, man muß also nicht erst mit '...' die Evaluierung anwerfen.

Code: (dl )
print ' ' x 2 . "$key" . ' ' x (30-length($key)) . "$value\n";

print erwartet nicht einen Scalar, es erwartet Listen. Du kannst also print die einelnen Elemente durch Komma getrennt hinwerfen und mußt sie nicht erst vorher zusammenverketten. Wie das print dann optimiert, ... ist print's Sache.

Code: (dl )
return undef;

Das ist doppelt. return; ohne Argument ist richtig und undef; auch, weil es der zuletzt evaluierte Wert ist und somit sowieso zurückgegeben wird. Beides zusammen bremst nur.

Code: (dl )
1
2
3
4
open FH, "<$file" or ...
# ist alt
open FH, '<', $file or ...
# ist besser.

Denn in $file könnten auch < oder > am Anfang stehen. So etwas kann gefährlich werden, wenn $file taint ist. Ich hab's nicht genau angeschaut, aber so viele verschiedene Handles, die sicher nie alle gleichzeitig offen sind, fallen auf.
Code: (dl )
open my $handle, '<', $file or ...

gibt es auch. Das macht manchmal einiges einfacher. Vor allen Dingen, wenn $handle aus dem Scope hüpft, ist die Datei sauber geschlossen.

Slices erzeugen sehr klaren kurzen Code.
Code: (dl )
1
2
3
4
5
6
7
8
9
for (@sys{keys %sys}) { 
chomp; # defaut $_ paßt so
s/\t/ /g; # und hier auch
s/\s+/ /g;
}

@stat{qw/ProcUser ProcNice ProcSystem ProcIdle ProcIOWait/} = split /\s+/, $1;

@stat{qw/PageIn PageOut/} = ($1, $2);


Beim Gruppieren sieht man besser, wo die Abbrüche sind
Code: (dl )
... = (split /\s+/, <PRC>)[0..6,9..18,21..22,35..36,38];


(\s+|) im regulären Ausdruck ist das nicht das gleiche wie (\s*) ??

Immer wieder der Gleiche Pfad zu den Daten, ein Alias wirkt Wunder und erhöht die Performance
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$disk{$3}{'DiskMajor'}          = $1;
$disk{$3}{'DiskMinor'} = $2;
$disk{$3}{'DiskReadRequests'} = $4;
$disk{$3}{'DiskReadBytes'} = $6 * $block_size;
$disk{$3}{'DiskWriteRequests'} = $8;
...

# besso so

for my $alias ($disk{$3}) {
$alias->{DiskMajor} = $1;
$alias->{DiskMinor} = $2;
$alias->{DiskReadRequests} = $4;
$alias->{DiskReadBytes} = $6 * $block_size;
$alias->{DiskWriteRequests} = $8;
...
}
$SIG{USER} = sub {love 'Perl' or die};
steffenw
 2005-12-21 21:43
#61018 #61018
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Soweit ist das ok.

new fängt typisch an mit:
my $class = shift;

die einzelnen Methoden mit:
my $self = shift;
Jetzt folgt das, was Du der Methode selbst übergeben hast.
Wenn Du nichts Sinnvolles hast, was die Methode zurückgibt, dann ist es immer $self.
Dann kannst Du so etwas wie $window->location()->href() oder kürzer $window->location->href bauen. Das hast Du sicher schon mal in JavaScript gesehen: window.location.href ... alles klar?

Achte etwas auf die Schreibweisen:
- Klassennamen, packagenamen so: SoEinSchoenerName
- Konstanten so: use constant SO_EIN_SCHOENER_NAME => 'name';
- my deklariert so: my ($so_ein_schoener_name, @so_ein_schoener_name, %so_ein_schoener_name);
- our deklariert so: our $VERSION;
- sub's so: sub so_ein_schoener_name { ...
- sub's als Objektmethoden außer new und DESTROY so: sub soEinSchoenerName { ...
Alle sub's und Methoden, die nur intern im Modul verwendet werden, bekommen ein _ vorangestellt.
Das ist soweit das Wesentliche. Perl ist es eigentlich egal aber wenn man Code veröffentlicht/austauscht, macht es Sinn sich an so etwas zu halten. Im Kamelbuch steht dann auch noch mehr dazu.\n\n

<!--EDIT|steffenw|1135195242-->
$SIG{USER} = sub {love 'Perl' or die};
<< |< 1 ... 3 4 5 6 7 8 9 ... 12 >| >> 119 Einträge, 12 Seiten



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