--- Clinton Gormley <[EMAIL PROTECTED]> wrote: > > we are exploring the idea of writing medium to > large > > Perl apps in the future which will require > mod_perl. > > the current environment is apache 1.3. having > read > > modperl's doc and i am concerned about running > > multiple unrelated mod_perl apps on one server, > such > > as 2 or 3 medium Perl apps. ( issue like database > > handler pollution etc which i know little about ) > > > > The only place where you would have an issue with > running multiple > applications within one server (even if distributed > across virtual > servers) is where : > - you have a common module that is used by more > than one application > - that module has the concept of a single set of > configuration data > rather than a per-application set > > Not very clear, so let me give an example. > > If, for example, you were to have a module called > My::Template, that is > used by 5 different applications. > > My::Template stores the path to the templates in the > package wide > variable $template_path. > > As each application sets its own template_path, it > overrides the setting > from the application before. > > The ways to avoid this are: > * you pass the template path in to My::Template > every time you call it > > process_template ($template_path, > $template_name, $data) > > * you create a My::Template object which, amongst > other things, has > the template path as a property > > $t = My::Template->new(); > $t->template_path($path); > $t->process_template($template,$data); > > * for classes which inherit from My::Template, > instead of using a > scalar $template_path, you use a hash, which has > the class of the > calling object as the key, and that classes > template path as the > value > > package My::Template; > > my %Template_Path; > > sub template_path { > my $self = shift; > my $class = ref $self || $self; > if (@_) { > my $path = shift; > $Template_Path{$class} = $path}; > } > return $Template_Path{$class} > } > > > Another example of things with global effects is the > current working > directory. CWD is global, and thus you cannot rely > on it staying the > same. The safest way to handle this is to just use > absolute filenames.
thanks! I actually have an example of this. A module for event logging purpose. the global variable is a hash consists a set of default log flags corresponding to log messages. i can register a new flag/msg to the global variable in my app and go on with the logging. a simplified version : package EventLogging; my %EVENT_TYPES = ( log_in_ok => 'Login OK', .. ); sub add_event { my ($self, $your_event) = @_; while ( my ($k, $v) = each %$your_event ) { $EVENT_TYPES{ $k } = $v; } } use EventLogging; my $elog = EventLogging->new() $elog->add_event({...}); now under mod_perl with few apps sharing the same module, what's the best way to solve this problem ? mod_perl has an excellent document. but is there a checklist kind of thing for running mod_perl in environment like this? where can i read more about this? > hth > > Clint > > thanks, James. ____________________________________________________________________________________ Finding fabulous fares is fun. Let Yahoo! FareChase search your favorite travel sites to find flight and hotel bargains. http://farechase.yahoo.com/promo-generic-14795097