कैसे उपयोग करने के लिए सबा से पर्ल स्क्रिप्ट

कार्य । वहाँ है एक स्क्रिप्ट प्रोग्रामिंग भाषा में पर्ल. यह परिभाषित करता है कुछ समारोह (सबा). आप की जरूरत करने के लिए टाइपलसारी इस समारोह में एक और स्क्रिप्ट है.

यहाँ एक उदाहरण है । वहाँ है एक स्क्रिप्ट script.pl को परिभाषित करता है जो सबा header. इस सबा के पास स्ट्रिंग, और है यह इस स्ट्रिंग में एक markdown हैडर. इस स्क्रिप्ट में इस सबा प्रदर्शित करने के लिए इस्तेमाल दो हेडर:

▶ Run
#!/usr/bin/perl

use feature qw(say);

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

say header('one');
say header('two');

चलाने perl script.pl स्क्रीन पर देखते हैं:

## ONE
## TWO

कार्य बनाने के लिए एक और स्क्रिप्ट other.pl मिलेगी जो का उपयोग भी सबा.

समाधान — कॉपी-पेस्ट

सरल (लेकिन बुरा) समाधान है नकल करने के लिए कोड के बाद के चरणों में एक और स्क्रिप्ट है. इस समाधान प्राप्त किया जाता है यहाँ एक other.pl:

#!/usr/bin/perl

use feature qw(say);

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

say header('three');

आप कर सकते हैं अब इस स्क्रिप्ट को चलाने perl other.pl और देखने के लिए स्क्रीन पर पाठ ## THREE.

इस समस्या का समाधान है, लेकिन यह एक बुरा निर्णय है । इस तथ्य के कारण है कि एक ही कोड है में कई फ़ाइलों यह मुश्किल हो जाता है के साथ काम करने के इस तरह के कोड. जब आप की जरूरत है बदलने के लिए इस सबा, तो इसे बदलने के लिए कई स्थानों में (और अभी भी याद करने के लिए है बदलने के लिए कोड में सभी फ़ाइलें) ।

समाधान डाल करने के लिए है सबा में एक अलग मॉड्यूल

सही समाधान बनाने के लिए है एक Saba में एक अलग मॉड्यूल है । इस के लिए एक फ़ाइल बनाने lib/Utils.pm:

package Utils;

use strict;
use warnings;

use Exporter;

our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
    header
);
our @EXPORT = @EXPORT_OK;

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

1;
  • package Utils; - घोषणा की है कि यह "पुस्तकालय" Utils
  • use strict; और use warnings; — मोड स्विच करने के लिए पर्ल था और अधिक की मांग की अच्छी कोड
  • 5 लाइनों के बारे में EXPORT से पता चलता है कि जब आप कनेक्ट है कि पुस्तकालयों की जरूरत है, कार्य करने के लिए header उपलब्ध था
  • ले जाया गया समारोह
  • 1; — पैकेज के साथ समाप्त करना चाहिए सच

के बाद इस विवरण के समारोह में आप से की जरूरत है स्क्रिप्ट script.pl को साफ करने के लिए, लेकिन कनेक्शन जोड़ें लाइब्रेरी:

#!/usr/bin/perl

use feature qw(say);

use Utils;

say header('one');
say header('two');

फिर आप कर सकते हैं चलाने के लिए यह एक ही स्क्रिप्ट का उपयोग कर आदेश perl -Ilib/ script.pl. कमांड लाइन में -I के पास मूल्य lib/ — जहां निर्देशिका पर्ल जाएगा खोज पुस्तकालयों के लिए. इस का नतीजा यह स्क्रिप्ट है कि वास्तव में पहले के रूप में ही.

और अब बिल्कुल तुच्छ करने के लिए टाइपलसारी ही सबा में एक और स्क्रिप्ट है. लिखने स्क्रिप्ट other.pl, जो लगभग एक ही है के रूप में script.pl:

#!/usr/bin/perl

use feature qw(say);

use Utils;

say header('three');

इस स्क्रिप्ट को चलाने perl -Ilib/ other.pl स्क्रीन पर देख ## THREE.

समाधान — कनेक्ट स्क्रिप्ट कोड के लिए स्क्रिप्ट

वहाँ एक अन्य समाधान है, आप का उपयोग कर सकते हैं सबा में परिभाषित किया गया है स्क्रिप्ट script.pl करने के लिए टाइपलसारी में स्क्रिप्ट other.pl. ऐसा करने के लिए, यह लिखने के लिए पाठ फ़ाइल other.pl:

#!/usr/bin/perl

use feature qw(say);

require './script.pl';

say header('three');

स्क्रिप्ट चलाने perl other.pl (फ़ाइल other.pl में होना चाहिए के रूप में एक ही फ़ोल्डर में स्क्रिप्ट script.pl). परिणाम:

## ONE
## TWO
## THREE

इतना है कि जब आप स्क्रिप्ट को चलाने other.pl बनाया गया था के सभी कोड है कि था script.pl (लाइन ## ONE और ## TWO), और उसके बाद ही कोड को चलाने से एक स्क्रिप्ट other.pl (लाइन ## THREE).

आदेश में चलाने के लिए जब आप स्क्रिप्ट other.pl प्रदर्शन नहीं किया गया था भाग script.pl हम की जरूरत है एक छोटे से परिवर्तन script.pl. आप की आवश्यकता लपेट के लिए पूरे कोड स्क्रिप्ट में शरीर की शर्त के तहत और के लिए लिखने के अंत में स्क्रिप्ट इकाई के रूप में एक सही मूल्य:

#!/usr/bin/perl

use feature qw(say);

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

if ( not caller() ) {
    say header('one');
    say header('two');
}

1;

अब अगर हम चलाने के लिए perl script.pl, हम वास्तव में एक ही उत्पादन से पहले के रूप में, और यदि आप शुरू perl other.pl, तो उत्पादन में हो जाएगा, केवल वांछित पाठ ## THREE.

कीवर्ड caller रिटर्न एक अलग मूल्य पर निर्भर करता है कैसे आप शुरू कर दिया स्क्रिप्ट. इस सुविधा के लिए हम यहाँ का उपयोग विभाजित करने के लिए एक स्क्रिप्ट चल रहा है सीधे कनेक्शन स्क्रिप्ट का उपयोग कर require.

अन्य लेख