2010-02-18 11 views
9

मैं HTML :: टेम्पलेट मॉड्यूल का उपयोग करना चाहता हूं। हालांकि, यह उस सर्वर पर स्थापित नहीं है जिसका उपयोग मैं सीजीआई स्क्रिप्ट विकसित करने के लिए कर रहा हूं।मैं रनटाइम पर एक पर्ल मॉड्यूल कैसे लोड कर सकता हूं?

रनटाइम पर एक मॉड्यूल लोड करना संभव है: मुझे टेम्पलेट.pm फ़ाइल को मेरे स्थानीय पर्ल इंस्टॉलेशन पर मिला और मैंने जिस सर्वर का उपयोग कर रहा हूं उसमें फ़ाइल अपलोड की।

#!/usr/bin/perl -w 

use CGI qw(:standard :html4); 
use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 

# use HTML::Template; 

use Template; 

# my $package = "HTML::Template"; 
# eval { 
# (my $pkg = $package) =~ s|::|/|g; # require need a path 
# require "$pkg.pm"; 
# import $package; 
# }; 
# die [email protected] if([email protected]); 

# open the HTML template 
my $template = HTML::Template->new(filename => 'test.tmpl'); 

# fill in some parameters in the template 
$template->param(home => $ENV{HOME}); 
$template->param(path => $ENV{PATH}); 

# send the obligatory Content-Type 
print "Content-Type: text/html\n\n"; 

# print the template 
print $template->output; 
+0

मैं उलझन में हूं। यदि आपने अपने सर्वर पर Template.pm अपलोड किया है, तो आप इसे 'उपयोग' के साथ संकलित समय पर लोड करने में सक्षम होना चाहिए? – rjh

+0

मुझे लाइन पर एक त्रुटि मिल रही है: मेरा $ टेम्पलेट = HTML :: टेम्पलेट-> नया (फ़ाइल नाम => 'test.tmpl'); – coson

+1

@ कोसन और, त्रुटि क्या है? –

उत्तर

11

यहाँ मैं क्या कर रहा है।

How do I keep my own module/library directory? और What's the difference between require and use?perlfaq8 में भी देखें।

+1

हाँ, ऐसा लगता है कि आप वास्तव में क्या करना चाहते हैं, बस मॉड्यूल के लिए एक और जगह जोड़ें जो कि पार्ल को देखने के लिए जानता है, जो 'lib का उपयोग करें ...' लाइन है (ऊपर की दो पंक्तियां ढूंढने के बारे में हैं स्क्रिप्ट के सापेक्ष मॉड्यूल स्थान) – Cebjyre

0

हां यह है। Module::Runtime पर देखें। हालांकि, मैं एक स्थानीय स्थापित निर्देशिका में भी, अपने एचटीएमएल मॉड्यूल स्थापित करेंगे। यह शायद कम परेशानी है।

  cgi-bin/script.pl 
    cgi-bin/lib/HTML/Template.pm

script.pl में (आप mod_perl के अंतर्गत चल रहे हैं जब तक):

use FindBin qw($Bin); 
use File::Spec::Functions qw(catfile); 
use lib catfile $Bin, 'lib'; 
use HTML::Template; 

# The rest of your script 

तो HTML::Template वास्तव में वैकल्पिक है, perldoc -f require पढ़

+0

क्या आपका मतलब है FTP पर टेम्पलेट.pm सर्वर पर स्थानीय स्थापित निर्देशिका में? – coson

4

HTML::Template और Template अलग-अलग पर्ल मॉड्यूल हैं। यदि आप HTML :: टेम्पलेट का उपयोग करना चाहते हैं, तो आपको उस पैकेज को आयात करने के लिए स्क्रिप्ट के शीर्ष पर use HTML::Template; की आवश्यकता होगी।

सुनिश्चित करें कि आपने HTML.p टेम्पलेट की बजाय HTML/Template.pm फ़ाइल को अपनी स्थानीय मशीन से सर्वर पर कॉपी किया है।

+0

समस्या यह है कि मुझे नहीं पता कि सही HTML :: टेम्पलेट मॉड्यूल कौन सा है। जब मैं अपने विंडोज़ इंस्टॉलेशन के तहत खोज करता हूं, तो मुझे चार HTML.pm और टेम्पलेट.pm दिखाई देता है। मुझे यकीन नहीं है कि मुझे किस का उपयोग करना है। मुझे यकीन है कि मैं एक समय में एक फ़ाइल को आजमा सकता हूं। – coson

+2

इसे टेम्पलेट.pm कहा जाएगा लेकिन HTML नामक निर्देशिका के अंदर होगा। इस प्रकार पर्ल मॉड्यूल निर्धारित किए जाते हैं, उदा। मूस :: मेटा :: कक्षा मूस/मेटा/कक्षा.pm – rjh

+0

हाँ में है, आखिर में मैंने पिछले जवाब के आधार पर यह अनुमान लगाया। – coson

9

यह सिनान के जवाब देने के लिए समान है, लेकिन का उपयोग करता local::lib:

सेट अप अपनी फ़ाइलों के रूप में:

 
cgi-bin/script.pl 
cgi-bin/lib/HTML/Template.pm 

और अपनी स्क्रिप्ट में:

use strict; 
use warnings; 
use local::lib 'lib'; 
use HTML::Parser; 

स्थानीय का लाभ :: lib है आप सीपीएएन से मॉड्यूल को सीधे अपने चयन की निर्देशिका में स्थापित कर सकते हैं:

perl -MCPAN -Mlocal::lib=lib -e 'CPAN::install("HTML::Parser")' 
+1

+1 जब आप कुछ सीजीआई-बिन सर्वर स्क्रिप्ट डिबग करते समय उपयोगकर्ता निर्देशिका से अतिरिक्त मॉड्यूल का उपयोग करना चाहते हैं तो उपयोगी। – GuruM

1

मुझे इसे एक विकल्प के रूप में जोड़ा जाना चाहिए था, क्योंकि मैं इस मॉड्यूल के रखरखाव में से एक हूं: App::FatPacker का इस्तेमाल आपके आवेदन के साथ तीसरे पक्ष के मॉड्यूल को शामिल करने के लिए किया जा सकता है, इसलिए इसे होने की आवश्यकता नहीं है तैनाती पर्यावरण में अलग से स्थापित किया गया।

संबंधित मुद्दे