package Catalyst::Plugin::Setenv; use warnings; use strict; use NEXT; =head1 NAME Catalyst::Plugin::Setenv - Allows you to set up the environment from Catalyst's config file. =head1 VERSION Version 0.02 =cut our $VERSION = '0.02'; =head1 SYNOPSIS In your application: use Catalyst qw/Setenv/; In your config file: environment: FOO: bar BAR: baz When your app starts, C<$ENV{FOO}> will be "bar", and C<$ENV{BAR}> will be "baz". You can also append and prepend to existing environment variables. For example, if C<$PATH> is C, you can append C by writing: environment: PATH: "::/myapp/bin" After that, C<$PATH> will be set to C. You can prepend, too: environment: PATH: "/myapp/bin::" which yields C. If you want a literal colon at the beginning or end of the environment variable, escape it with a C<\>, like C<\:foo> or C. Note that slashes aren't meaningful elsewhere, they're inserted verbatim into the relevant environment variable. =head1 EXPORT A list of functions that can be exported. You can delete this section if you don't export anything, such as for a purely object-oriented module. =head1 FUNCTIONS =head2 setup Calls the other setup methods, and then sets the environment variables. =cut sub setup { my $c = shift; $c->NEXT::setup(@_); my $env = $c->config->{environment}; return unless ref $env eq 'HASH'; foreach my $key (keys %$env){ my $value = $env->{$key}; if($value =~ /^:(.+)$/){ $ENV{$key} .= $1; } elsif($value =~ /^(.+[^\\]):$/){ $ENV{$key} = $1. $ENV{$key}; } else { $value =~ s/(^\\:|\\:$)/:/; $value =~ s/(^\\\\:|\\\\:$)/\\:/; $ENV{$key} = $value; } } return; } =head1 AUTHOR Jonathan Rockway, C<< >> =head1 BUGS =head2 Escaping Things like "\:foo" can't be literally inserted into an environment variable, due to my simplistic escaping scheme. Patches to fix this (but not interpert C<\>s anywhere else) are welcome. =head2 REPORTING Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Catalyst::Plugin::Setenv You can also look for information at: =over 4 =item * The Catalyst Website L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * RT: CPAN's request tracker L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS Thanks to Bill Moseley's message to the mailing list that prompted me to write this. =head1 COPYRIGHT & LICENSE Copyright 2006 Jonathan Rockway, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; # End of Catalyst::Plugin::Setenv