मैं #!/usr/bin/perl
के बारे में googled, लेकिन मुझे कोई संतोषजनक उत्तर नहीं मिला। मुझे पता है कि यह एक सुंदर मूल बात है, लेकिन फिर भी, मुझे समझा सकता है कि पर्ल में #!/usr/bin/perl
का महत्व क्या है? इसके अलावा, -w
या -T
#!/usr/bin/perl
में साइन इन करता है? मैं पर्ल के लिए नौसिखिया हूँ, इसलिए कृपया धैर्य रखें।# या/usr/bin/perl में -T या -w का महत्व क्या है?
उत्तर
#! आमतौर पर "shebang" कहा जाता है और यह कंप्यूटर को स्क्रिप्ट चलाने के तरीके को बताता है। आपको #!/bin/sh
या #!/bin/bash
के साथ बहुत सी शैल-स्क्रिप्ट दिखाई देगी।
तो, /usr/bin/perl
आपका पर्ल दुभाषिया है और यह चलाया जाता है और फ़ाइल को निष्पादित करने के लिए दिया जाता है।
शेष लाइन पर्ल के लिए विकल्प हैं। "-T" is tainting (इसका मतलब है कि इनपुट को "विश्वसनीय नहीं" के रूप में चिह्नित किया जाता है जब तक आप इसे प्रारूप में नहीं देखते)। "-w" चेतावनियां चालू करता है।
आप perldoc perlrun चलाकर और अधिक जानकारी प्राप्त कर सकते हैं (Perldoc पर्ल का प्रलेखन पाठक है, स्थापित हो सकता है, अपने पैकेज में हो सकता है)।
स्क्रिप्ट के लिए आप लिखना मैं उनके साथ शुरू करने की सिफारिश करेंगे:
#!/usr/bin/perl
use warnings;
use strict;
यह और चेतावनी के बहुत सारे अतिरिक्त चेक पर बदल जाता है - विशेष रूप से उपयोगी आप सीख रहे हैं, जबकि (मैं अभी भी सीख रहा हूँ और मैं का उपयोग कर अब 10 से अधिक वर्षों के लिए पर्ल)।
यहां एक प्रश्न है। जब मुझे #!/Usr/bin/perl -T वाली फ़ाइल में एक और .pl फ़ाइल की आवश्यकता होती है, तो यह त्रुटि फेंकता है। और जब मैं हटा देता हूं, यह चलता है। क्या कारण है? धन्यवाद। – vijay
इसे शेबांग कहा जाता है। यूनिक्स आधारित सिस्टम (ओएसएक्स, लिनक्स, इत्यादि ...) पर वह लाइन भाषा दुभाषिया के पथ को इंगित करती है जब स्क्रिप्ट कमांड लाइन से चलती है। पर्ल/usr/bin/perl के मामले में पर्ल दुभाषिया का मार्ग है। यदि हैशबैंग को छोड़ दिया गया है * निक्स सिस्टम निष्पादन योग्य के रूप में बुलाए जाने पर स्क्रिप्ट को पार्स करने का तरीका नहीं जानेंगे। इसके बजाय यह स्क्रिप्ट को समझने की कोशिश करेगा कि उपयोगकर्ता जो भी खोलने वाला होता है (शायद बाश) और स्क्रिप्ट को तोड़ देता है।
http://en.wikipedia.org/wiki/Hashbang
डब्ल्यू और -टी तर्क है कि जिस तरह से पर्ल दुभाषिया संचालित नियंत्रित कर रहे हैं। वे वही तर्क हैं जिन्हें आप सीधे कमांड लाइन से पर्ल दुभाषिया को कॉल करते समय आह्वान कर सकते हैं।
- -W चेतावनियां दिखाता है (उर्फ डीबगिंग जानकारी)।
- -T दंड/सुरक्षा जांच चालू करता है।
-w
और -T
दोनों "मूर्खतापूर्ण" झंडे हैं।
-w
आपके कोड में use warning
स्टेटमेंट जैसा ही है, और यह कई कंप्यूटर्स में चेतावनी विकल्प के बराबर है।
#!/usr/bin/perl -w
print "$A\n";
print "Hello, world!\n";
प्रिंट होगा:: एक सरल उदाहरण अप्रारंभीकृत चर का उपयोग कर के बारे में चेतावनी होगा
Name "main::A" used only once: possible typo at ./perl-warnings line 3.
Use of uninitialized value $A in concatenation (.) or string at
./perl-warnings line 3.
Hello, world!
-T
झंडा मतलब यह है कि किसी भी मूल्य है कि बाहर की दुनिया से अंदर गणना की जा रही के लिए आया था (विपरीत के रूप में कार्यक्रम) संभावित खतरे के रूप में माना जाता है, और सिस्टम से संबंधित संचालन, जैसे फाइल लिखने, सिस्टम कमांड निष्पादित करने आदि जैसे मानों का उपयोग अस्वीकार करता है (यही कारण है कि पर्ल सेटिड/सेटगिड के तहत चल रही है जब पर्ल "टेंट" मोड को सक्रिय करेगा।)
स्क्रिप्ट के अंदर मान को दोबारा जांचने के लिए "दांतेदार" मोड "लागू" है।
जैसे, कोड:
#!/usr/bin/perl -T
$A = shift;
open FILE, ">$A";
print "$A\n";
close FILE;
एक गंभीर त्रुटि का उत्पादन होगा (कार्यक्रम समाप्त):
$ ./perl-tainted jkjk
Insecure dependency in open while running with -T switch at
./perl-tainted line 3.
और वह केवल इसलिए है क्योंकि तर्क मूल्य "बाहर" से आया है और नहीं था " दो बार जांच की गई"। "दांत" मोड उस तथ्य पर आपका ध्यान खींच रहा है। बेशक, इसे बेवकूफ बनाना आसान है, उदाहरण:
#!/usr/bin/perl -T
$A = shift;
$A = $1 if $A =~ /(^.*$)/;
open FILE, ">$A";
print "$A\n";
close FILE;
इस मामले में सब ठीक काम किया। आपने "दांत मोड" को "मूर्ख" किया। खैर, धारणा यह है कि प्रोग्रामर का इरादा कार्यक्रम को सुरक्षित बनाना है, इसलिए प्रोग्रामर सिर्फ त्रुटि के आसपास काम नहीं करेगा, बल्कि कुछ सुरक्षा उपायों को लेगा। पर्ल के प्रचलित नामों में से एक "सिस्टम प्रशासकों का गोंद और नली टेप" है। यह असंभव नहीं है कि सिस्टम प्रशासक अपनी जरूरतों के लिए पर्ल स्क्रिप्ट तैयार करेगा और इसे root
अनुमतियों के साथ चलाएगा। इस स्क्रिप्ट के बारे में सोचें कि कुछ सामान्य उपयोगकर्ताओं को करने की अनुमति नहीं है ... आप शायद उन चीजों को दोबारा जांचना चाहते हैं जो प्रोग्राम का हिस्सा नहीं हैं, और आप चाहते हैं कि पर्ल आपको उनके बारे में याद दिलाना चाहें।
उम्मीद है कि यह मदद करता है।
'-w' 'चेतावनियों का उपयोग' जैसा नहीं है;'। प्रज्ञा स्पष्ट रूप से स्कॉप्ड है। – friedo
"-w उपयोग चेतावनी के समान है"। यह बिल्कुल सही नहीं है। -W चेतावनी हमेशा चालू करता है ($^डब्ल्यू या कोई चेतावनी को अनदेखा कर रहा है), -वह चेतावनियां चालू करता है, सिवाय इसके कि जब $^डब्ल्यू 0 पर सेट हो या कोई चेतावनी का उपयोग नहीं किया जाता है। "चेतावनियों का उपयोग करें" lexically scoped है। – tinita
कलंक मोड (-टी) के बारे में:
require
और use
बयान बदल जब कलंक मोड चालू है।
लाइब्रेरी/मॉड्यूल लोड करने का पथ अब इसके पथ से .
(वर्तमान निर्देशिका) नहीं है।
तो यदि आप पथ को स्पष्ट रूप से निर्दिष्ट किए बिना वर्तमान कार्य निर्देशिका के सापेक्ष किसी भी पुस्तकालय या मॉड्यूल लोड करते हैं, तो आपकी स्क्रिप्ट खराब मोड के नीचे टूट जाएगी।
पूर्व के लिए: विचार करें perl_taint_ex.pl
#!/usr/bin/perl -T
require "abc.pl";
print "Done";
इस
D:\perlex>perl perl_taint_ex.pl
"-T" is on the #! line, it must also be used on the command line
at perl_taint_ex.pl line 1.
D:\perlex>perl -T perl_taint_ex.pl
Can't locate abc.pl in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib)
at perl_taint_ex.pl line 3.
तरह विफल हो जाएगा तो जब कलंक मोड पर है, तो आप बयान की आवश्यकता स्पष्ट रूप से जहां लोड करने के लिए बताना होगा .
से लाइब्रेरी @INC
सरणी से रंग मोड के दौरान हटा दी गई है।
@INC
में पुस्तकालय फ़ाइलों और मॉड्यूल पढ़ने के लिए वैध पथों की एक सूची है।
तो कलंक मोड पर है, तो आप बस निम्नलिखित करना होगा:
D:\perlex>perl -ID:\perlex -T perl_taint_ex.pl
Done
-ID:\perlex
@INC
में निर्देशिका D:\perlex
शामिल होंगे।
आप @INC
पर पथ जोड़ने के अन्य तरीकों का प्रयास कर सकते हैं, यह केवल एक उदाहरण है।
यह स्पष्टीकरण क्या होता है यदि आप कमांडलाइन से -T पैरामीटर का सही ढंग से उपयोग नहीं करते हैं, लेकिन एक पर्ल स्क्रिप्ट की शेबैंग लाइन में निर्दिष्ट करते हैं तो क्या होता है इसका एक अच्छा स्पष्टीकरण प्रदान करता है। उपयोगी। – pdwalker
- 1. -532459699 का महत्व क्या है?
- 2. PerformanceSelectorOnMainThread में WaitUntilDOne का महत्व क्या है?
- 3. System.CLSCompliantAttribute का महत्व क्या है?
- 4. पर्ल ($ _, @_) में अंडरस्कोर का महत्व क्या है?
- 5. एसक्यूएल में # का महत्व क्या है?
- 6. "#" या "#!" का महत्व क्या है जो वेबसाइट url के
- 7. सही एमआईएमई प्रकारों का महत्व क्या है?
- 8. संदर्भ द्वारा वापसी का महत्व क्या है?
- 9. java.io.Serializable वर्ग का महत्व क्या है?
- 10. प्रारंभ में (सी) में 0.0f का महत्व क्या है?
- 11. SQL सर्वर में 1/1/1753 का महत्व क्या है?
- 12. सी में 0-लंबाई सरणी का महत्व क्या है?
- 13. mysql में बयान के आदेश का महत्व क्या है?
- 14. पायथन में प्रोग्रामिंग करते समय आईडीई का महत्व क्या है?
- 15. क्या रूबी में "==" हमेशा समानता का महत्व है?
- 16. डब्ल्यूसीएफ में आईएमटाडाटा एक्सचेंज का महत्व क्या है?
- 17. एसक्यूएल सर्वर में स्कीमा का महत्व क्या है?
- 18. हाइपर्मियाडिया एपीआई में स्वयं लिंक का महत्व क्या है?
- 19. मशीन सीखने में पीसीए या एसवीडी का महत्व
- 20. महत्व
- 21. पर्मजेन स्पेस का महत्व
- 22. 'के' के साथ स्थिरांक शुरू करने का महत्व क्या है?
- 23. नींद का महत्व (0)
- 24. java.util.regex - Pattern.compile() का महत्व?
- 25. क्या का उद्देश्य है "::" T-SQL
- 26. महत्व
- 27. `IList` क्षमता सेट करने का महत्व क्या है?
- 28. एईएस सीबीसी एन्क्रिप्शन के लिए, चतुर्थ का महत्व क्या है?
- 29. स्मृति मुक्त करने का महत्व?
- 30. MySQL प्रश्नों में WHERE 1 का महत्व
'#!/Usr/bin/perl' को शेबांग लाइन कहा जाता है। चेतावनियों के लिए '-w'।' टी 'टेंट मोड के लिए। –
'-w' कई सालों से अनुशंसित नहीं किया गया है। पर्ल 5.6.0 के बाद से हमने 'चेतावनियों का उपयोग किया है' जो अधिक शक्तिशाली और अधिक लचीला है। –