नहीं, यह नहीं करने के लिए संभव
eval
बिना, के रूप में
require()
bareword मॉड्यूल नाम की आवश्यकता है
perldoc -f require पर वर्णन किए गए है,। हालांकि, यह eval का बुरा उपयोग नहीं है, क्योंकि यह मनमाने ढंग से कोड के इंजेक्शन की अनुमति नहीं देता है (मान लीजिए कि आपके पास
require
आईएनजी फ़ाइल की सामग्री पर नियंत्रण है)।
संपादित करें: कोड नीचे संशोधित है, लेकिन मैं पूर्ण संस्करण के लिए पहला संस्करण छोड़ रहा हूं।
मैं
मैं इस छोटे से चीनी मॉड्यूल का उपयोग करने के क्रम में गतिशील लोड करते थे का उपयोग करें:
package MyApp::Util::RequireClass;
use strict;
use warnings;
use Exporter 'import'; # gives you Exporter's import() method directly
our @EXPORT_OK = qw(requireClass);
# Usage: requireClass(moduleName);
# does not do imports (wrong scope) -- you should do this after calling me: $class->import(@imports);
sub requireClass
{
my ($class) = @_;
eval "require $class" or do { die "Ack, can't load $class: [email protected]" };
}
1;
पी एस। मैं इस परिभाषा पर देख रहा हूं (मैंने इसे थोड़ी देर पहले लिखा था) और मैं इसे जोड़ने में सोच रहा हूं: $class->export_to_level(1, undef, @imports);
... यह काम करना चाहिए, लेकिन परीक्षण नहीं किया गया है।
संपादित: संस्करण 2 अब एक eval के बिना बहुत अच्छे (धन्यवाद ysth): http://metacpan.org/pod/Class::MOP
डुप्लिकेट:। http://stackoverflow.com/questions/442710/how-do-i-use-a-perl-package-known-only-in-runtime –
इस बारे में खेद है कि मैं लेकिन नहीं कर सके खोजे गए ' कुछ भी नहीं मिला। – user226723
मुझे आपके कोडिंग मानकों को अपडेट किया जाएगा। मूल रूप से हार्ड कोड वाले eval'ing के बारे में कुछ भी गलत या असुरक्षित नहीं है स्ट्रिंग। आप जो चाहते हैं उसे पूरा करने का यह सबसे आसान तरीका है। यदि आप उपयोगकर्ता इनपुट में गुजर रहे हैं, तो यह एक और कहानी है ... – runrig