Antw: Strict mode

Roland Bauer Roland.Bauer at mediaprint.at
Thu Dec 30 06:22:07 CST 1999


* * * vienna-pm-list * * *


>ich habe ja geschrieben, dass ich mit dem strict mode etwas probleme 
>hatte.

Die "einfachste" Loesung ist, jene Variablen, die als "global"
angemeckert werden, explizit als global zu deklarieren:

ich habe geaendert:
1) use vars eingefuegt (und $platform damit als global deklariert)
2) $debug auf 7 gesetzt


# -----------------------------------------
#!/usr/bin/perl -w
#

use strict;     # do not allow implicit variable definition


use vars qw($platform);

my $debug = 7;                          # debug setting (used in platform.rc)
my $strings_db_file         = "strings.db";     # Database for strings
my $strings_db_button_file  = "button.db";      # Database for buttons
my $strings_db_caption_file = "caption.db";     # Database for captions
my $strings_db_fonts_file   = "fonts.db";       # Database for fonts
my $strings_xx_file = "strings.xx";     # Strings to translate

# now set some platform specific things...

require "platform.rc";         # Get system settings

print "Platform setting: $platform\n" if ($debug >5);
# ------------------------------------------------------------------------------


>Ein Programmlauf schreibt mir nun:
>Global symbol "platform" requires explicit package name at t.pl line ...

Das ist Variante 2:

Das tun, was Dir Perl empfiehlt ;-)

"Global symbol "$platform" requires explicit package name"

Also statt bloss $platform explizit $main::platform schreiben.
(Denn wenn Du kein package definiert hast, bist Du im 
packge main)

Ist aber NICHT empfehlenswert.

Oder das ganze mit Modulen loesen. Das ist die sauberste
Loesung.


>Nun die Frage, wie ich den Package Namen wirklich zuweise. Muss ich 
>hier spezielle Definitionen machen? Ich schreibe ja kein Modul.

Um ehrlich zu sein: Use strict wird (und will) Dich so lange
nerven, bis Du freiwillig Module verwendest ... ;-)

Denn Module sind das essentielle Feature ab Perl Version 5.

Im Prinzip kommen dadurch bei jedem File am Beginn ca 3 bis 4 Zeilen Code
dazu, die man eigentlich nur abschreiben muss:






---- File Platform.pm im Unterverzeichnis Woerterbuch/Config
package Woerterbuch::Config::Platform; # wie du willstrequire Exporter; # fix at ISA = qw(Exporter); # fix at EXPORT_OK = qw($platform); # was Du exportieren willst$platform = ...
-------------------------------------------




Hauptprogramm:

#----------------
use strict;
use Woerterbuch::Config::Platform qw($platform);

print $platform;
# ---------------------------


Es ist eine gewisse Umstellung, erhoeht aber die
Wartbarkeit Deiner Programme extrem.

Denn ein Programm im Nachhinein zu modularisieren ist
eine Wahnsinnsarbeit.

Und wenn Du mehrere Leute mitarbeiten lassen willst,
solltest Du das Programm unbedingt in Module zerteilen,
damit sich die programme nicht gegenseitig stoeren (koennen).

deshalb auch @EXPORT_OK statt @EXPORT
damit die sache noch stricter wird ;-)

roland





--
roland.bauer at mediaprint.at
internet-applikationen
TEL: +43-1-36000/3949

###
You are subscribed to vienna-pm-list
http://www.fff.at/fff/vienna.pm/



More information about the Vienna-pm mailing list