2012-09-17 10 views
9

में एक निश्चित स्ट्रिंग के लिए एक स्ट्रिंग चर जोड़ मैं एक चर रहा है जो किसी प्रॉम्प्ट पर दर्ज की गई है:पर्ल

my $name = <>; 

मैं इस के लिए एक निश्चित स्ट्रिंग '_one' संलग्न करने के लिए (एक अलग चर में) चाहते हैं।

उदा।

my $one = "${name}_one"; 

^_one जब मैं इसे प्रिंट अगली पंक्ति पर दिखाई देता है और जब: अगर $name = Smith तो यह 'Smith_one'

हो जाता है मैं इस तरह के रूप में कई विभिन्न तरीकों से जो मुझे सही परिणाम नहीं देती हैं, की कोशिश की है मैं इसका उपयोग करता हूं, _one बिल्कुल शामिल नहीं है।

इसके अलावा:

my $one = $name."_one"; 

^'_one'स्ट्रिंग के शुरुआत में दिखाई देता है।

और:

my $end = '_one'; 
my $one = $name.$end; 
or 
my $one = "$name$end"; 

इनमें से कोई नहीं परिणाम मैं चाहता हूँ की उपज है, तो मैं कैसे इनपुट शीघ्र से स्वरूपित किया गया है से संबंधित कुछ कमी किया जाना चाहिए, शायद। विचारों की सराहना की!

उत्तर

21

आपकी समस्या स्ट्रिंग संलग्न करने से संबंधित नहीं है: जब आप एक पंक्ति पढ़ते हैं (उदा। <> के माध्यम से), तो रिकॉर्ड इनपुट विभाजक उस स्ट्रिंग में शामिल है; यह आमतौर पर एक नई लाइन \n है। न्यू लाइन chomp चर को निकालने के लिए:

my $name = <STDIN>; # better use explicit filehandle unless you know what you are doing 
    # now $name eq "Smith\n" 
    chomp $name; 
    # now $name eq "Smith" 

एक स्ट्रिंग में एक चर को जोड़ लिए, आपको सामान्यतः ${name} वाक्य रचना आप इस्तेमाल की जरूरत नहीं है। ये लाइनें सभी अपने स्ट्रिंग के लिए _one संलग्न करें और एक नया स्ट्रिंग पैदा करेगा:

"${name}_one" # what you used 
    "$name\_one" # _ must be escaped, else the variable $name_one would be interpolated 
    $name . "_one" 
    sprintf "%s_one", $name 
    # etc. 

और यह अपने स्ट्रिंग के लिए _one संलग्न करें और अभी भी यह $name में स्टोर होगा: आह कि न्यू लाइन के बारे में दिलचस्प बात यह है

$name .= "_one" 
+0

चरित्र - chomp तुरंत समस्या हल करता है! मैं भी भाग्य के उन तरीकों की कोशिश करता था, बिना किस्मत के - लेकिन अब वे सभी काम करते हैं! धन्यवाद! – dgBP

+2

मजेदार; मैं सोच रहा था कि '$ $ \ _one" 'या' $ नाम जैसे अजीब संरचनाओं की तुलना में '$ {name} _one" का उपयोग करना कितना बेहतर होगा। "_one" '। –

+0

@ जोनाथन लेफ्लर आपके संपादन के लिए धन्यवाद। अब तक, मैं "' $ {foo} 'में भी स्पष्ट वाक्यविन्यास हूं, न कि एक एनाक्रोनिस्टिक बैश-आईएसएम "शिविर, और मेरा मूल सुझाव खराब था। मैंने तदनुसार संपादित किया है। – amon