2012-03-18 8 views
5

मैं इस तरह, कुछ पर्ल लाइन का उपयोग करना चाहते:

perl -pe "$_=~s///e" 

समस्या है, बैश "$ _" चर के विस्तार रखता है। मैं पर्ल अभिव्यक्ति को एकल उद्धरण में डाल सकता हूं, लेकिन इससे मुझे कुछ चरों को एक स्क्रिप्ट में जोड़ने से रोक दिया जाएगा।

क्या "$ _" चर का विस्तार करने से कोई रास्ता रोकना बंद है?

+2

ध्यान दें: हास्यास्पद मत बनो। शैल प्रोग्रामिंग प्रश्न बिल्कुल स्टैक ओवरफ्लो पर हैं। – tchrist

+1

आपको '$ _' चर का उपयोग करने के लिए * की आवश्यकता नहीं है *। – TLP

+0

@ टीएलपी - यह सिर्फ एक उदाहरण था। वास्तविक लिपि में, मुझे वास्तव में * इसकी आवश्यकता है *। :) – Rogach

उत्तर

11
perl -pe '$_=~s///e' 

या

perl -pe "\$_=~s///e" 
1

मिक्स और मैच।

perl -pe '$_=~s///e; echo "'"$idontknowperl"'"' 

जब तक उद्धृत वर्ग एक दूसरे के खिलाफ बट अप करते हैं तो इसे एक भी तर्क माना जाएगा।

+3

वैसे हाँ, लेकिन पर्ल कंपाइलर खुश नहीं होगा कि आपने 'echo' विधि/फ़ंक्शन' कहा है। :) – tchrist

5

सबसे पहले: आप जानते हैं कि आप पर्यावरण चरों तक पहुंचने के लिए $ENV{myvariable} का उपयोग कर सकते हैं, है ना? और m//, s/// और tr/// का उपयोग करते समय आपको $_ निर्दिष्ट करने की आवश्यकता नहीं है?

इसके अलावा, यदि आप पर्ल पर वेरिएबल्स पास करना चाहते हैं, तो ऐसा करने के अन्य तरीके भी हैं जो आपके पर्ल कोड में खोल चर को इंटरपोल करने की कोशिश कर रहे हैं।

perl -we 'my ($var1, $var2, $var3) = @ARGV;' "$MYFOO" "$BAR" "$baz" 

यदि आपके शैल चर में सफेद जगह नहीं है, तो आप उद्धरण के साथ बांट सकते हैं।

अब, यदि आप -p या -n स्विच का उपयोग करना चाहते हैं, तो इसके आसपास के तरीके भी हैं।

perl -pwe 'BEGIN { my $var1 = shift; my $var2 = shift } #code goes here' 
    "$MYFOO" "$BAR" file1 file2 

एक बयान शुरू में shift का उपयोग करना इतना है कि वे -p और -n स्विच की अंतर्निहित while पाश का उपयोग नहीं करतीं @ARGV से चर निकाल देंगे।

+1

'एनवी' perl में विशेष रूप से पर्यावरण चर के लिए है, आमतौर पर खोल चर नहीं। –

संबंधित मुद्दे

 संबंधित मुद्दे