यह शायद पहले भी पूछा जा चुका है, लेकिन मुझे नहीं पता कि क्या खोजना है। समस्या यह है कि मैं ऐसे पैकेज से निपट रहा हूं जो 4 निर्देशिका गहरी है और इसका एक लंबा नाम है। पैकेज के भीतर कुछ निर्यात किए गए स्थिरांक हैं जिन्हें मैं मुख्य रूप से उपयोग करना चाहता हूं, लेकिन मैं उनके पूर्ण योग्य नामों का उपयोग नहीं करना चाहता, न ही मैं उनके स्थानीय नाम (अंतिम :: के बाद का हिस्सा) का उपयोग करना चाहता हूं। उदाहरण के लिए।

use strict;
use warnings;
use Vendor::FirstPackage::SecondPackage::ThirdPackage qw(const_a);

# this is works, but I want to include the last package
my $x = const_a;

# this throws bareword error
my $y = ThirdPackage::const_a;

# this throws undefined subroutine 
my $z = ThirdPackage::const_a();

क्या इसके अंतिम पैकेज नाम के माध्यम से निरंतर तक पहुंचने का कोई तरीका है?

1
gogators 6 मार्च 2016, 22:04

3 जवाब

सबसे बढ़िया उत्तर
use Package::Alias 'ThirdPackage' => 'Vendor::FirstPackage::SecondPackage::ThirdPackage';

लेकिन मैं केवल पूरी तरह से योग्य नाम का उपयोग करने की सलाह दूंगा।

7
ysth 6 मार्च 2016, 22:36

आप अपनी मुख्य लिपि में इस तरह एक पैकेज बना सकते हैं:

package ThirdPackage;
use strict;
use Vendor::FirstPackage::SecondPackage::ThirdPackage qw(const_a);

तब आपको const_a को ThirdPackage::const_a के रूप में एक्सेस करने में सक्षम होना चाहिए। यदि आप उस पैकेज को अपनी मुख्य स्क्रिप्ट की शुरुआत में रखेंगे, तो मुख्य कोड को package main; से अलग किया जाना चाहिए

3
bart 6 मार्च 2016, 22:36

आप इस तरह Module::Load इस्तेमाल कर सकते हैं:

use strict;
use warnings;
use Module::Load qw(load_remote);
BEGIN {
    load_remote 'ThirdPackage', 'Vendor::FirstPackage::SecondPackage::ThirdPackage', qw(const_a);
}

my $x = ThirdPackage::const_a;
1
bolav 6 मार्च 2016, 22:35