Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7590[/thread]

SubRoutinen richtig einbauen



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
leissi
 2006-01-05 13:18
#61508 #61508
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hallo,

mein Problem ist das ich drei Abfrageroutinen habe die ich in Subroutinen umbauen möchte aber habe keinen blassen Schimmer wo ich anfangen soll!!

Kann mir jemand mal auf die Sprünge bringen????

Hier das Script läuft so sehr gut durch und gibt die erforderlichen Meldungen zurück!

Quote
#!/usr/bin/perl

use strict;
use warnings;
use time::localtime;
use Data::Dumper;


my $ausgabe_Datei = "backupCheck.txt";
open(LogDatei, ">backupCheck.txt") or die "Kann Log Datei nicht anlegen : $!";

my $tm = localtime;
print LogDatei " $tm \n\n\n";

my $parameterFile = "input/Main.cfg";
open(IN, $parameterFile) || die "Paramterfile $parameterFile nicht gefunden!";
my @par = <IN>;
close(IN);

eval( join("\n", @par) );

# Flag, ob die Gesamtprüfung positiv ist.
# 0 = nein, d.h. In mindestens einem Fall war keine aktuelle Backup-Datei vorhanden.
# 1 = ja, d.h. es ware stets eine aktuelle Backup-Datei vorhanden.


my $global_boolean = 1;



#wird erst später aus DOMS.mdb ermittelt, vorerst wird mit Hardcodierten Werten gearbeitet

my (@pjDomain,@pjName);

$pjDomain[0] = "ZITA_PKM";
$pjName [0] = "Phoenix";

$pjDomain[1] = "ZITA_ATF";
$pjName [1] = "ZITA_522";

$pjDomain[2] = "ZITA_ATF";
$pjName [2] = "TLA";

my $numberProjects = $#pjName;
my $backupPath = 'H:\\Perl\\BackupCheck\\_backup';


# Nun wird für jedes TestDirector-Projekt überprüft, ob im
# Backup-Bereich des Servers ein aktuelles Backup vorliegt.
for (my $i = 0; $i <= $numberProjects; $i++)
{

my $bkupDirectory = $backupPath . "\\" . $pjDomain[$i] . "_" . $pjName[$i] . "_db";

print LogDatei "#######################################################################################################################\n";
print LogDatei " " . $tm . "\n \n Prüfe Existenz von " . $bkupDirectory . "\n";
print LogDatei "#######################################################################################################################\n";

if ( -e $bkupDirectory )
{
print LogDatei "Verzeichnis ist vorhanden!\n";
opendir(DIR,$bkupDirectory) or die "Kann $bkupDirectory nicht öffnen: $!\n";

my @verzeichnisse = grep{-f $bkupDirectory .'/'.$_}readdir(DIR);
my $bool = 0;
for my $file(@verzeichnisse)

{
if(existsActBackup($bkupDirectory.'/'.$file,1))
{
$bool = 1;
print LogDatei "\n################################################################################################################\n";
print LogDatei "\n ****************************Backup vorhanden***************************** \n" . $bool . " Backupdatei gefunden!\n";
print LogDatei $file . "\n \n" . @verzeichnisse . " Backupdateien im Verzeichnis " . $bkupDirectory . " vorhanden!" ;
print LogDatei "\n################################################################################################################\n";
}
else
{
#print LogDatei "--------------------------------------------------------------------------\n";
#print LogDatei " Aktuelle Datei ist nicht vorhanden!\n";
#print LogDatei "--------------------------------------------------------------------------\n";
}
}
if ($bool == 1)
{
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "INFO : Es besteht in dem Verzeichnis mind. eine aktuelle Backupdatei!\n";
print LogDatei "--------------------------------------------------------------------------\n\n\n";
}
else
{
print LogDatei "************************************************************************************
**\n";
print LogDatei "**********ERROR: Es besteht in dem Verzeichnis keine aktuelle Backupdatei!************\n";
print LogDatei "************************************************************************************
**\n\n\n";
$global_boolean = 0;


}


# Hier wird geprüft ob aktuelle Datei vorliegt oder nicht
# return:
# 0 = Die überprüfte Datei ist nicht aktuell genug
# 1 = Die überprüfte Datei ist aktuell genug
sub existsActBackup
{
my ($file,$max_age) = @_;
my $tmpValue = 0;
#print LogDatei $tm ;
my $age = (time - (stat($file))[10]) / (60 * 60 * 24);
if ($age < $max_age)
{
$tmpValue = 1;
print LogDatei " " . $tm . " Aktuelle Dateien vorhanden! \n";
print LogDatei "file stat($file)\n";
#print LogDatei "file2 $file \n";
}
else
{
$tmpValue = 0;
#print LogDatei "Keine aktuellen Dateien vorhanden! \n";
}
return $tmpValue;
}

}

}

## Hier wird nach Durchlauf der Kontrolle ein Statment abgegeben wenn Error auftrat!
unless($global_boolean)
{
print LogDatei "########################################################################################################################\n\n";
print LogDatei " ********** ERROR: Backup ist unvollständig !! Bitte prüfen!!! ************\n\n";
print LogDatei "########################################################################################################################\n";
print LogDatei "########################################################################################################################\n\n\n";
}



#########################################################################################################################
##########################################################################################################################
###########################################################################################################################

#!/usr/bin/perl
# Naechster Teil Überprüfung des Verzeichnisses OTA auf aktuelle Dateien wenn keine vorhanden wird ein Fehler ausgegeben!
#use strict;
#use time::localtime;
#use Data::Dumper;


# Flag, ob die Gesamtprüfung positiv ist.
# 0 = nein, d.h. In mindestens einem Fall war keine aktuelle OTA-Datei vorhanden.
# 1 = ja, d.h. es ware stets eine aktuelle OTA-Datei vorhanden.


$global_boolean = 1;


print LogDatei "\n##########################################################################################################################";
print LogDatei "\n##########################################################################################################################";
print LogDatei "\n##########################################################################################################################";
print LogDatei " $tm \n\n\n";


my $dir = '//sv040555.zitd.global.commerzbank.com//D$//Log//TestDirector//OTAScripting';
opendir(DIR,$dir) or die $!; # Verzeichnis "öffnen"


my @verzeichnisse = grep{-f $dir .'/'.$_}readdir(DIR);
my $bool = 0;
for my $file(@verzeichnisse)

{
if(existsActBackup($dir.'/'.$file,1))
{
$bool = 1;
print LogDatei "\n--------------------------------------------------------------------------------------
--------------------------\n";
print LogDatei "\n ----------------------------OTA Dateien vorhanden----------------------------- \n" . $bool . " OTA-Dateien gefunden!\n";
print LogDatei $file . "\n \n" . @verzeichnisse . " Backupdateien im Verzeichnis " . $dir . " vorhanden!" ;
print LogDatei "\n--------------------------------------------------------------------------------------
---------------------------\n";
}
else
{
#print LogDatei "--------------------------------------------------------------------------\n";
#print LogDatei " Aktuelle OTA-Datei ist nicht vorhanden!\n";
#print LogDatei "--------------------------------------------------------------------------\n";
}
}
if ($bool == 1)
{
print LogDatei "\n############################################################################################\n";
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "INFO : Es besteht in dem Verzeichnis mind. eine aktuelle OTA-Dateien!\n";
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "\n############################################################################################\n";
}
else
{
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "ERROR: Es besteht in dem Verzeichnis keine aktuelle OTA-Dateien!\n";
print LogDatei "--------------------------------------------------------------------------\n";
#$global_booleans = 0;
}



# Hier wird geprüft ob aktuelle Datei vorliegt oder nicht
# return:
# 0 = Die überprüfte Datei ist nicht aktuell genug
# 1 = Die überprüfte Datei ist aktuell genug
sub existsActOTA
{
my($file,$max_age) = @_;
my $tmpValue = 0;
my $age = (time - (stat($file))[10]) / (60 * 60 * 1);
if ($age < $max_age)
{
$tmpValue = 1;
print LogDatei " " . $tm . " Aktuelle OTA-Dateien im Ordner OTA vorhanden! \n";
print LogDatei "file stat($file)\n";
}
else
{
$tmpValue = 0;
# print LogDatei "Keine aktuellen Dateien vorhanden! \n";
}
return $tmpValue;
}

## Hier wird nach Durchlauf der Kontrolle ein Statment abgegeben wenn keine aktuellen Dateien vorhanden sind!
unless($global_boolean)
{
print LogDatei "########################################################################################################################\n\n";
print LogDatei " ********** ERROR: OTA-Dateiverzeichnis ist unvollständig !! Bitte prüfen!!! ************\n\n";
print LogDatei "########################################################################################################################\n";
print LogDatei "########################################################################################################################\n\n\n";
}

###############################################################################################################################
#Überprüfung LogDatei




# Flag, ob die Gesamtprüfung positiv ist.
# 0 = nein, d.h. In mindestens einem Fall war keine aktuelle Backup-Datei vorhanden.
# 1 = ja, d.h. es ware stets eine aktuelle Backup-Datei vorhanden.
$global_boolean = 1;





my $dir1 = '//sv040555.zitd.global.commerzbank.com//D$//Backup//MSSQL//TRN//ztb_treasurycockpit_db';
opendir(DIR,$dir1) or die $!; # Verzeichnis "öffnen"


my @verzeichnisse1 = grep{-f $dir1 .'/'.$_}readdir(DIR);
$bool = 0;
for my $file(@verzeichnisse1)

{
if(existsActLOG($dir1.'/'.$file,1))
{
$bool = 1;
print LogDatei "\n--------------------------------------------------------------------------------------
--------------------------\n";
print LogDatei "\n ----------------------------LOG Dateien vorhanden----------------------------- \n" . $bool . " LOG-Dateien gefunden!\n";
print LogDatei $file . "\n \n" . @verzeichnisse1 . " LOG-Dateien im Verzeichnis " . $dir1 . " vorhanden!" ;
print LogDatei "\n--------------------------------------------------------------------------------------
---------------------------\n";
}
else
{
#print LogDatei "--------------------------------------------------------------------------\n";
#print LogDatei " Aktuelle Datei ist nicht vorhanden!\n";
#print LogDatei "--------------------------------------------------------------------------\n";
}
}
if ($bool == 1)
{
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "INFO : Es besteht in dem Verzeichnis mind. eine aktuelle LOG-Dateien!\n";
print LogDatei "--------------------------------------------------------------------------\n";
}
else
{
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "ERROR: Es besteht in dem Verzeichnis keine aktuelle LOG-Dateien!\n";
print LogDatei "--------------------------------------------------------------------------\n";
$global_boolean = 0;
}

unless($global_boolean)
{
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "ERROR: LOG-Dateien unvollständig !!!!!\n";
print LogDatei "--------------------------------------------------------------------------\n";
print LogDatei "\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++\n";
print LogDatei "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++\n\n\n";
}

# Hier wird geprüft ob aktuelle Datei vorliegt oder nicht
# return:
# 0 = Die überprüfte Datei ist nicht aktuell genug
# 1 = Die überprüfte Datei ist aktuell genug
sub existsActLOG
{
my ($file,$max_age) = @_;
my $tmpValue = 0;
#print LogDatei $tm ;
my $age = (time - (stat($file))[10]) / (60 * 60 * 1);
if ($age < $max_age)
{
$tmpValue = 1;
print LogDatei " " . $tm . " Aktuelle Dateien vorhanden! \n";
print LogDatei "file stat($file)\n";
#print LogDatei "file2 $file \n";
}
else
{
$tmpValue = 0;
# print LogDatei "Keine aktuellen Dateien vorhanden! \n";
}
return $tmpValue;
}

exit
bloonix
 2006-01-05 18:49
#61509 #61509
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Leissi,

Subs lohnen sich nur, wenn du ein Stück Programmcode
an mindestens zwei Stellen wiederverwendest, was in deinen
Skripts nicht der Fall ist.

Aber ich hätte da ein paar andere Vorschläge für dich :-)

- es ist besser -w im Shebang zu nutzen als "use warnings;", da mittels -w auch Module geprüft werden.
- print LogDatei '#' x 130, "\n"; ist um einiges lesbarer als diese langen #-Ketten
- die sub-Funktion existsActBackup() hat nichts in der for-Schleife verloren, sondern gehört ausserhalb.

Hier auf die Schnelle ein Formatierungsbeispiel ...

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/perl -w
use strict;
use Data::Dumper;

my $ausgabe_Datei = "backupCheck.txt";
open(LogDatei, ">backupCheck.txt") or die "Kann Log Datei nicht anlegen : $!";

my $tm = localtime;
print LogDatei " $tm\n\n\n";

my $parameterFile = "input/Main.cfg";
open(IN, $parameterFile) || die "Paramterfile $parameterFile nicht gefunden!";
my @par = <IN>;
close(IN);

eval( join("\n", @par) );

# Flag, ob die Gesamtprüfung positiv ist.
# 0 = nein, d.h. In mindestens einem Fall war keine aktuelle Backup-Datei vorhanden.
# 1 = ja, d.h. es ware stets eine aktuelle Backup-Datei vorhanden.

my $global_boolean = 1;

#wird erst später aus DOMS.mdb ermittelt, vorerst wird mit Hardcodierten Werten gearbeitet

my (@pjDomain,@pjName);

$pjDomain[0] = "ZITA_PKM";
$pjName [0]  = "Phoenix";

$pjDomain[1] = "ZITA_ATF";
$pjName [1]  = "ZITA_522";

$pjDomain[2] = "ZITA_ATF";
$pjName [2]  = "TLA";

my $numberProjects = $#pjName;
my $backupPath = 'H:\\Perl\\BackupCheck\\_backup';

# Nun wird für jedes TestDirector-Projekt überprüft, ob im
# Backup-Bereich des Servers ein aktuelles Backup vorliegt.
for my $i (0 .. $numberProjects) {

  my $bkupDirectory = "$backupPath\\$pjDomain[$i]_$pjName[$i]_db";

  print LogDatei '#' x 130, "\n";
  print LogDatei "  $tm\n\nPrüfe Existenz von $bkupDirectory\n";
  print LogDatei '#' x 130, "\n";

  if ( -e $bkupDirectory ) {
     print LogDatei "Verzeichnis ist vorhanden!\n";
     opendir(DIR,$bkupDirectory) or die "Kann $bkupDirectory nicht öffnen: $!\n";

     my @verzeichnisse = grep{-f $bkupDirectory .'/'.$_}readdir(DIR);
     my $bool = 0;

     for my $file(@verzeichnisse) {
        if(existsActBackup($bkupDirectory.'/'.$file,1)) {
           $bool = 1;
           print LogDatei '#' x 130, "\n";
           print LogDatei '#' x 30, "Backup vorhanden", '#' x 30, "$bool Backupdatei gefunden!\n";
           print LogDatei "$file\n\n", @verzeichnisse, " Backupdateien im Verzeichnis $bkupDirectory vorhanden!\n";
           print LogDatei '#' x 130, "\n";
        } else {
           #print LogDatei '-' x 80, "\n";
           #print LogDatei " Aktuelle Datei ist nicht vorhanden!\n";
           #print LogDatei '-' x 80, "\n";
        }
     }

     if ($bool == 1) {
        print LogDatei '-' x 80, "\n";
        print LogDatei "INFO : Es besteht in dem Verzeichnis mind. eine aktuelle Backupdatei!\n";
        print LogDatei '-' x 80, "\n";
     } else {
        print LogDatei '*' x 130, "\n";
        print LogDatei '*' x 10, "ERROR: Es besteht in dem Verzeichnis keine aktuelle Backupdatei!", '*' x 10, "\n";
        print LogDatei '*' x 130, "\n";
        $global_boolean = 0;
     }
  }
}

## Hier wird nach Durchlauf der Kontrolle ein Statment abgegeben wenn Error auftrat!
unless($global_boolean) {
  print LogDatei '*' x 130, "\n\n";
  print LogDatei ' #' x 6, " ERROR: Backup ist unvollständig !! Bitte prüfen!!! ", ' #' x 6, "\n\n";
  print LogDatei '*' x 130, "\n";
  print LogDatei '*' x 130, "\n\n\n";
}

# Hier wird geprüft ob aktuelle Datei vorliegt oder nicht
# return:
#  0 = Die überprüfte Datei ist nicht aktuell genug
#  1 = Die überprüfte Datei ist aktuell genug

sub existsActBackup {
  my ($file,$max_age) = @_;
  my $tmpValue = 0;
  #print LogDatei $tm;
  my $age = (time - (stat($file))[10]) / (60 * 60 * 24);
  if ($age < $max_age) {
     $tmpValue = 1;
     print LogDatei "   $tm Aktuelle Dateien vorhanden!\n";
     print LogDatei "file  stat($file)\n";
     #print LogDatei "file2 $file\n";
  } else {
     #$tmpValue = 0; diese Zuweisung ist nicht notwendig, da $tmpValue mit 0 definiert wird
     #print LogDatei "Keine aktuellen Dateien vorhanden!\n";      
  }
  return $tmpValue;
}
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.
pq
 2006-01-05 19:38
#61510 #61510
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=opi,05.01.2006, 17:49]Subs lohnen sich nur, wenn du ein Stück Programmcode
an mindestens zwei Stellen wiederverwendest[/quote]
das ist falsch, mit subroutinen brichst du ein programm in logische einheiten
auf und kannst so viel schneller funktionlität hinzufügen, bugs fixen etc.
außerdem bist du dann gezwungen (mit strict), variablen zu deklarieren,
am besten nur in der jeweiligen subroutine, was den gültigkeitsbereich
extrem einschränkt und somit schwerer bugs entstehen können.

eine subroutine sollte am besten in ein fenster passen, idealerweise
in ein standard-xterm 80x24. =)
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
 2006-01-05 21:16
#61511 #61511
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
func1();func2();func3();

sub func1 { print "hallo"; }
sub func2 { print " pq "; }
sub func3 { print ":-)\n"; }

grauenhaft :)

wenn ich unbedingt einen neuen gültigkeitsbereich benötige, dann setze
ich geschweifte klammern um den programmblock ... beispiel:

{
  open FILE,'<',"$file";
  local $/;
  my $cfile = <FILE>;
}

aber hierfür eine extra subfunktionen zu schreiben, halte ich für unnötig,
überhaupt für so ein kleines skript - wenn man natürlich mit einer
vergrößerung des skripts auf ein paar tausend zeilen rechnet, dann könnte
man sich die logische unterteilung von nutzem machen.

[quote=pq,05.01.2006, 18:38]mit subroutinen brichst du ein programm in logische einheiten auf und außerdem bist du dann gezwungen (mit strict), variablen zu deklarieren, am besten nur in der jeweiligen subroutine, was den gültigkeitsbereich extrem einschränkt und somit schwerer bugs entstehen können.[/quote]

das mag jeder handhaben, wie er möchte. es gibt proggis, die nutzen aus
performancegründen überhaupt keine subs. einen entsprechenden
thread könnte ich mal im selfforum heraussuchen, da habe ich mich mal
mit jemanden genau über dieses thema unterhalten.

[quote=pq,05.01.2006, 18:38]eine subroutine sollte am besten in ein fenster passen, idealerweise in ein standard-xterm 80x24. =)[/quote]

und an diese ideale konvention hälst du dich immer? :-)
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.
pq
 2006-01-05 21:54
#61512 #61512
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=opi,05.01.2006, 20:16]func1();func2();func3();

sub func1 { print "hallo"; }
sub func2 { print " pq "; }
sub func3 { print ":-)\n"; }

grauenhaft :)[/quote]
guter witz.
ich sagte logische abschnitte.
gegenbeispiel:
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
my $id    = 23;
my $name = "foo";
my $data  = get_data_from_db($id, $foo);
my $items = get_other_data($id);

my $new_data = merge($data, $items);

sub get_data_from_db {
 my ($id, $name) = @_;
 # some checks on $id and $name
 # database conncetion
 # prepare
 # get rows
 # do something with rows
 # ...
return $result;
}

sub get_other_data {
 # long subroutine...
}

sub merge {
 # long subroutine...
}

Quote
{
  open FILE,'<',"$file";
  local $/;
  my $cfile = <FILE>;
}

du hast das "or die $!" vergessen. ausserdem ist der block sinnfrei, denn
$cfile ist nach dem block wieder verschwunden.
Quote
das mag jeder handhaben, wie er möchte.

eben nicht. man sollte sich an einen gewissen standard anpassen, irgendwann
kommt das auch einem selbst zugute.
lies mal Perl Best Practices.
Quote
es gibt proggis, die nutzen aus
performancegründen überhaupt keine subs.

sicher. es gibt vieles. ich sage ja nur, was gut wartbar ist und was nicht.
ich habe auch code in meinen modulen, der performance mit wartbarkeit
eintauscht.
aber dann sollte man vorher benchmarken, um sicher zu sein, wie viel einem
das bringt. das habe ich getan.

Quote
[quote=pq,05.01.2006, 18:38]eine subroutine sollte am besten in ein fenster passen, idealerweise in ein standard-xterm 80x24. =)


und an diese ideale konvention hälst du dich immer? :-)[/quote]
ich sagte "am besten" und "idealerweise". verstehst du, was diese worte bedeuten?\n\n

<!--EDIT|pq|1136491058-->
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
 2006-01-05 22:07
#61513 #61513
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pq,05.01.2006, 20:54]
Quote
{
  open FILE,'<',"$file";
  local $/;
  my $cfile = <FILE>;
}

du hast das "or die $!" vergessen.[/quote]
[quote=pq,05.01.2006, 20:54]
ich sagte logische abschnitte.
[/quote]
du hast es geschrieben, nicht gesagt.

[quote=pq,05.01.2006, 20:54]
$cfile ist nach dem block wieder verschwunden.[/quote]

es war auch nur ein beispiel

[quote=pq,05.01.2006, 20:54]
eben nicht. man sollte sich an einen gewissen standard anpassen, irgendwann
kommt das auch einem selbst zugute.
lies mal Perl Best Practices.
[/quote]

hmm... perl best practies ist kein standard, sondern nur ein vorschlag, wie
man es besser machen könnte.

[quote=pq,05.01.2006, 20:54]
sicher. es gibt vieles. ich sage ja nur, was gut wartbar ist und was nicht.
ich habe auch code in meinen modulen, der performance mit wartbarkeit
eintauscht.
aber dann sollte man vorher benchmarken, um sicher zu sein, wie viel einem
das bringt. das habe ich getan.
[/quote]
das nehme ich dir auch ab.

[quote=pq,05.01.2006, 20:54]
ich sagte "am besten" und "idealerweise". verstehst du, was diese worte bedeuten?[/quote]
jap :) be friendly

[quote=pq,05.01.2006, 20:54]aber dann sollte man vorher benchmarken,[/quote]

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   sub print1 { print NULL "hallo"; }
  sub print2 { print NULL " pq "; }
  sub print3 { print NULL ":-)\n"; }

  open NULL,'>>','/dev/null';

  Benchmark::cmpthese(-1, {
     'mit subs'   => sub { print1(); print2(); print3(); },
     'ohne subs'  => sub { print NULL "hallo"; print NULL " pq "; print NULL ":-)\n"; }
  });

  close NULL;

              Rate  mit subs ohne subs
mit subs   558545/s        --      -68%
ohne subs 1754392/s      214%        --


ich bin ja auch nur der überzeugung, dass man das jedem selbst überlassen
sollte.\n\n

<!--EDIT|opi|1136491897-->
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.
pq
 2006-01-05 22:43
#61514 #61514
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=opi,05.01.2006, 21:07][quote=pq,05.01.2006, 20:54]
ich sagte logische abschnitte.
[/quote]
du hast es geschrieben, nicht gesagt.
[/quote]
ah so ist das.  schön, dass wir drüber geredet haben.
Quote
hmm... perl best practies ist kein standard, sondern nur ein vorschlag, wie
man es besser machen könnte.

habe ich was anderes behauptet? mein vorschlag, es zu lesen, bleibt.
ich habe nicht gesagt, lies es und befolge es. lesen und verstehen
reicht schon. aber du kannst es auch lassen. ich bin ja nicht so =)

Quote
[sinnloser benchmark]

mach denselben benchmark mal mit ein paar datenbank-zugriffen.
Quote
ich bin ja auch nur der überzeugung, dass man das jedem selbst überlassen
sollte.

sagen wir, dass man das sollte, ok. aber im team wirst du dir solchen stil
abgewöhnen müssen, und wenn du anderen ratschläge gibst, in einem forum,
musst du halt auch mit kritik von anderen rechnen.
meine erfahrung hat mich gelehrt, was ich oben gesagt habe.
und ich bin gerne bereit, ratschläge anzunehmen. ich habe mir durch PBP
in relativ kurzer zeit ein paar sachen ab- und angewöhnt, von denen
ich vorher überzeugt oder nicht überzeugt war.

aber das soll hier kein flamewar werden. benutze deinen stil, wenn er dir
gut bekommt, und ich meinen.
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
 2006-01-05 23:01
#61515 #61515
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pq,05.01.2006, 21:43]
[sinnloser benchmark][/quote]

das war auch nur ein gaudi :-)

[quote=pq,05.01.2006, 21:43]
habe ich was anderes behauptet? mein vorschlag, es zu lesen, bleibt.
ich habe nicht gesagt, lies es und befolge es. lesen und verstehen
reicht schon. aber du kannst es auch lassen. ich bin ja nicht so =)
[/quote]

du bist schon der - die - zweite, der -die - mir einen ratschlag zu diesem
buch gibt. so langsam kommt der verdacht, dass ihr hier unter einer decke
steckt :p

ich nehme diesen rat gerne an.

[quote=pq,05.01.2006, 21:43]und wenn du anderen ratschläge gibst, in einem forum, musst du halt auch mit kritik von anderen rechnen.
...
und ich bin gerne bereit, ratschläge anzunehmen.
[/quote]

entschuldige bitte wenn es falsch rüber gekommen ist, aber ich komme
sehr gut damit zurecht und genau deswegen bin ich in diesem forum, um
mir kritik und manchmal auch lob einzuholen, aber was ich oder du davon
mitnehmen und was nicht, bleibt mir und auch dir überlassen.

Edit:
[quote=pq,05.01.2006, 21:43]
aber das soll hier kein flamewar werden.
[/quote]

das ist es auch nicht. meinungen prasseln nun halt mal aufeinander und
ich lese deine beiträge trotzdem mit begeisterung, weil ich noch viel lernen
kann.\n\n

<!--EDIT|opi|1136495898-->
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
 2006-01-06 02:57
#61516 #61516
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=opi,05.01.2006, 22:01]du bist schon der - die - zweite, der -die - mir einen ratschlag zu diesem
buch gibt. so langsam kommt der verdacht, dass ihr hier unter einer decke
steckt :p[/quote]
Es gibt mindestens zwei CPAN-Module, die die Vorschläge aus PBP an realen Code testen (Perl::Critic und noch eins). Nach der Verwendung von Perl::Critic ist mir die Lust an dem Buch vergangen.

Was sub-oder-nicht-sub angeht: ich bin auch nicht der Meinung, dass man immer alles strukturieren muss. Wenn man, wie hier, nichts zusammenfassen kann und das Skript kurz ist, dann kann man es so lassen. Der Vorteil von einer Liste von subs wäre, dass man eine Art Inhaltsverzeichnis hätte und dann schnell sehen könnte, was der Code macht. Man könnte aber auch geschickte Kommentare setzen.
leissi
 2006-01-06 09:36
#61517 #61517
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hi,

also nochmals wie kann ich Subroutinen denn einbauen in meinem Script?? Ich möchte das schon wenigsten ein Ansatz wie ich das vornehmen kann! Ich benutze dieses Script erstmal zum Lernen von Perl und möchte das nur verstehen wie ich im Ansatz eine Subroutine einbauen kann!!

Danke
Leissi :D\n\n

<!--EDIT|leissi|1136536609-->
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2006-01-05 13:18.