http://www.perlmonks.org?node_id=669081

Trihedralguy has asked for the wisdom of the Perl Monks concerning the following question:

I'm having problem debugging something that is wrong with my perl program. So I came to the Monastery to get a couple of extra sets of eyes.

The error I'm getting is: Undefined subroutine &ModPerl::ROOT::ModPerl::Registry::home_trihedralguy_htdocs_smi_employment_app_register_2ecgi::send_email

Can anyone see what I'm doing wrong? The Code Snippet from the calling script:
use lib '/home/thertzel/htdocs/smi/employment/app/'; #Current Director +y use EmailSender; #The name of the module send_email($username, $body); #we need to send it our username and the + preformed message.
the PM File:
package EmailSender; use Net::SMTP; use strict; sub send_email { my $username = shift; my $body = shift; my $smtp; #Define Scalar for Net::SMTP #Mail Settings $smtp = Net::SMTP->new( Host => 'smtp.smi.com', Timeout => 30, Debug => 1, ); #End Mail Settings $smtp->mail('humanresource@smi.com'); $smtp->to($username); $smtp->data(); $smtp->datasend("To: $username\n"); $smtp->datasend("From: humanresource\@foobar.com\n"); $smtp->datasend("Subject: Smi Employment Application\n"); $smtp->datasend("Content-Type: text/plain; charset=\"iso-8859-1\"\n"); $smtp->datasend(qq^ $body ^); my $errormsg = $smtp->status(); $smtp->dataend(); $smtp->quit; #return $errormsg; } 1;

Replies are listed 'Best First'.
Re: Undefined subroutine
by friedo (Prior) on Feb 20, 2008 at 19:38 UTC
    The problem is that send_email is not exported to the namespace of your calling script, so the subroutine is undefined. Two solutions: Use the fully-qualified name to call the sub, e.g. EmailSender::send_email( $username, $body ); or use Exporter to export the symbol to the calling namespace:
    package EmailSender; use base 'Exporter'; our @EXPORT_OK = ( 'send_email' ); ... 1;
    And then in your calling script:
    use EmailSender 'send_email';
Re: Undefined subroutine
by ikegami (Patriarch) on Feb 20, 2008 at 19:37 UTC
    Your PM file doesn't export send_email. Commonly, this is done with the use of Exporter. Alternatively, use EmailSender::send_email(...).
Re: Undefined subroutine
by Trihedralguy (Pilgrim) on Feb 20, 2008 at 21:58 UTC
    Ah! Yes thank you!! I had written down that need to do that, but forgot and ended up getting frustrated at nothing.
    Thanks again for your assistance!