जब तक कि मैं एक निजी पैकेज बनाने की कोशिश नहीं कर रहा हूं जिसे किसी को भी पता नहीं होना चाहिए, मैंने प्रति फ़ाइल एक पैकेज रखा है। यह समस्या हल करता है। लेकिन, चलिए उन्हें एक ही फाइल में डाल दें।
use एक फ़ाइल लोड करता है और उस पैकेज में import
विधि को कॉल करता है। यह वास्तव में केवल आकस्मिक रूप से है कि इसका तर्क मॉड्यूल नाम की तरह दिखता है। यह फाइल की तलाश में है। अगर फ़ाइल नहीं है, तो यह बारफ है।
आप ऐसा कर सकते हैं, जहां BarObj
मानता है कि FooObj
पहले से ही वहाँ है:
{
package FooObj;
sub new { bless { _count => 0 }, $_[0] }
sub add_data { $_[0]->{_count}++ }
}
{
package BarObj;
use Data::Dumper;
sub new {
bless { myFoo => FooObj->new }, $_[0];
}
sub foo { $_[0]->{myFoo} }
sub some_method { print Dumper($_[0]) }
}
my $bar = BarObj->new;
$bar->some_method;
आप एक पैकेज के साथ बातचीत करने की जरूरत है (और है कि सभी यह है: नहीं एक मॉड्यूल या किसी वस्तु), तुम बस इसे उपयोग करने से पहले इसे परिभाषित करने की आवश्यकता है। आप कुछ आयात करने की आवश्यकता है, तो आप कॉल कर सकते हैं import
सीधे:
FooObj->import(...);
वहाँ FooObj
से कुछ है कि आप आयात करना (लेकिन वारिस नहीं!) चाहते हैं, तो आप कोई लोड हो रहा है के साथ सीधे import
फोन है मान लीजिए;
{
package FooObj;
use Data::Dumper;
sub new { bless { _count => 0 }, $_[0] }
sub add_data { $_[0]->{_count}++ }
use Exporter qw(import);
our @EXPORT = qw(dumper);
sub dumper { print Dumper($_[0]) }
}
{
package BarObj;
FooObj->import;
sub new {
bless { myFoo => FooObj->new }, $_[0];
}
sub foo { $_[0]->{myFoo} }
# dumper mixin, not inherited.
sub some_method { dumper($_[0]) }
}
my $bar = BarObj->new;
$bar->some_method;
स्रोत
2010-04-12 10:50:18
संकेत यहां त्रुटि में है: "FooObj.pm का पता नहीं लगा सकता"। .pm हमेशा एक फ़ाइल का मतलब है। –