कई कार्यक्रम इस तकनीक का उपयोग करते हैं जहां एक एकल निष्पादन योग्य होता है जो इसके व्यवहार को बदलता है कि इसे कैसे निष्पादित किया गया था।
आम तौर पर प्रोग्राम के अंदर एक संरचना होती है जिसे केस / स्विच स्टेटमेंट कहा जाता है जो निर्धारित करता है कि निष्पादन योग्य नाम के साथ कहा गया था और फिर उस निष्पादन योग्य नाम के लिए उपयुक्त कार्यक्षमता को कॉल करेगा। यह नाम आमतौर पर पहला तर्क है जिसे कार्यक्रम प्राप्त करता है। उदाहरण के लिए, C
जब आप लिखते हैं:
int main(int argc, char** argv)
argv[0]
कहा जाता है निष्पादन योग्य का नाम। कम से कम, यह सभी गोले के लिए मानक व्यवहार है, और तर्कों का उपयोग करने वाले सभी निष्पादकों को इसके बारे में पता होना चाहिए।
पर्ल में उदाहरण
यहाँ एक उलझा हुआ उदाहरण मैंने पर्ल में एक साथ रखा है जो तकनीक को भी दिखाता है।
यहां वास्तविक स्क्रिप्ट है, इसे कॉल करें mycmd.pl
:
#!/usr/bin/perl
use feature ':5.10';
(my $arg = $0) =~ s#./##;
my $msg = "I was called as: ";
given ($arg) {
$msg .= $arg when 'ls';
$msg .= $arg when 'find';
$msg .= $arg when 'pwd';
default { $msg = "Error: I don't know who I am 8-)"; }
}
say $msg;
exit 0;
यहाँ फ़ाइल सिस्टम सेटअप है:
$ ls -l
total 4
lrwxrwxrwx 1 saml saml 8 May 24 20:49 find -> mycmd.pl
lrwxrwxrwx 1 saml saml 8 May 24 20:34 ls -> mycmd.pl
-rwxrwxr-x 1 saml saml 275 May 24 20:49 mycmd.pl
lrwxrwxrwx 1 saml saml 8 May 24 20:49 pwd -> mycmd.pl
अब जब मैं अपने आदेश चलाता हूं:
$ ./find
I was called as: find
$ ./ls
I was called as: ls
$ ./pwd
I was called as: pwd
$ ./mycmd.pl
Error: I don't know who I am 8-)