Thread Perl Option/Schalter in Switch-Case unterbringen (33 answers)
Opened by M4RC3L at 2016-03-14 10:28

Linuxer
 2016-03-16 16:42
#184192 #184192
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Ich denke schon. Es ließe sich direkt im Code wohl sauberer darstellen, was gemacht werden soll.

Man könnte beispielsweise eine Option "--as-cron" benutzen und darüber vermerken, ob das Skript via Cron ausgeführt wird oder nicht.

Ich nutze gerne CPAN:Getopt::Long für sowas und nutze beispielsweise zwei Hashes, einen für Flags für Schalter ja/nein oder an/aus und einen für Optionen mit Werten, die der Benutzer festlegen oder überschreiben darf.


Code (perl): (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
# Standard, sollte fast immer eingebunden werden
use strict;
use warnings;

# Modul zum Optionen behandeln
use Getopt::Long;

# Hash, um Flags (ein/aus, ja/nein) zu verwalten
my %FLAG = (
  RUNS_AS_CRON => 0,
);

# Hash, um Optionen mit Werten zu verwalten; z.B. --dummy "string" wird zu $OPT{dummy} = 'string';
my %OPT = (
  dummy => '',
);


### MAIN

# Verarbeite die gegebenen Optionen von der Kommandozeile; alles was übrig bleibt, bleibt in @ARGV
GetOptions(
  'as-cron' => \$FLAG{RUNS_AS_CRON},

  'dummy=s' => \$OPT{dummy},

) or exit 255;



# Wenn das Flag "RUNS_AS_CRON" gesetzt wurde, dann tu etwas passendes; z.B. eine While-Schleife umgehen, weil nicht interaktiv gearbeitet wird
if ( $FLAG{RUNS_AS_CRON} ) {
  # runs as cron job

}
# Wenn nicht, läuft das Programm wohl normal; wahrscheinlich interaktiv
else {
  # runs normally?
  print "Dummy is: >", $OPT{dummy}, "<\n";
}



Wenn das Skript als Cronjob eingetragen wird, gibt man eben die Option --as-cron an, um das dem Skript mitzuteilen...

edit: Comments to Code added
Last edited: 2016-03-17 11:14:41 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Perl Option/Schalter in Switch-Case unterbringen