यह है कि मैं क्या करने की कोशिश की है:मैं पर्ल में बैश कमांड के साथ स्ट्रिंग को कैसे प्रतिबिंबित करूं?
my $s = "s" x 1000;
my $r = `echo $s |more`;
लेकिन यह काम नहीं करता, मेरे कार्यक्रम सीधे बाहर निकल जाता है ...
यह है कि मैं क्या करने की कोशिश की है:मैं पर्ल में बैश कमांड के साथ स्ट्रिंग को कैसे प्रतिबिंबित करूं?
my $s = "s" x 1000;
my $r = `echo $s |more`;
लेकिन यह काम नहीं करता, मेरे कार्यक्रम सीधे बाहर निकल जाता है ...
यह आपके उदाहरण में काम नहीं करता है, क्योंकि आपने कभी भी $r
प्रिंट नहीं किया है। आउटपुट वैरिएबल $r
में कैप्चर किया गया है। इसके बजाय system()
का उपयोग करके, आप STDOUT पर मुद्रित आउटपुट देख सकते हैं, लेकिन फिर आप आउटपुट का उपयोग नहीं कर सकते (जैसा कि) संभवतः।
बस कार्य करें:
print $r;
अद्यतन: मैं print
करने के लिए say
बदल गया है, के बाद से "गूंज" पहले से ही आप एक नई पंक्ति देता है।
खोल मेटा वर्ण से बचने के लिए, के रूप में टिप्पणी में उल्लेख किया है, आप quotemeta.
उपयोग कर सकते हैं आप यह भी ध्यान रखें | more
जब एक चर में शेल से उत्पादन पर कब्जा कोई प्रभाव नहीं है कि होना चाहिए। प्रक्रिया बस है: echo | more | $r
, और आप more
छोड़ सकते हैं।
system() कमांड के साथ प्रयास करें:
my $s = "s" x 1000;
my $r = system("echo $s |more");
प्रदर्शित करेगा आपके सभी 'एस', और $r
में आपके पास परिणाम के परिणाम (0 इस मामले में) होगा।
बाश से गुज़रने के दौरान स्ट्रिंग से कैसे बचें? – lexer
आप [quotemeta] (http://perldoc.perl.org/functions/quotemeta.html) का उपयोग कर सकते हैं। या यदि आप जानते हैं कि क्या देखना है, तो आप खुद को पात्रों से बच सकते हैं। – TLP