पर्ल 5.14 के लिए संशोधित।
5,14 के बाद से, /r
झंडा वापसी के लिए प्रतिस्थापन के साथ, आप ऐसा कर सकते हैं:
print "Your name without spaces is: [", do { $name =~ s/\s+//gr; }
, "]\n";
आप map
और एक शाब्दिक चर का उपयोग कर सकते हैं।
my $name=" jason ";
print "Your name without spaces is: ["
, (map { my $a = $_; $a =~ s/\s+//g; $a } ($name))
, "]\n";
अब, आप एक शाब्दिक क्योंकि $ _ उर्फ और इस तरह अपने चर को संशोधित करेगा उपयोग करना होगा।
उत्पादन
Your name without spaces is: [jason]
# but: $name still ' jason '
वैसे do
बस के रूप में अच्छी तरह से (और शायद बेहतर) काम करेगा
print "Your name without spaces is: ["
, do { my ($a = $name) =~ s/\s+//g; $a }
, "]\n";
लेकिन शाब्दिक नकल अभी भी वहाँ है। my
में असाइनमेंट एक संक्षेप है कि कुछ लोग पसंद करते हैं (मुझे नहीं)।
इस मुहावरे के लिए, मैं एक ऑपरेटर मैं filter
फोन का विकास किया है:
sub filter (&@) {
my $block = shift;
if (wantarray) {
return map { &$block; $_ } @_ ? @_ : $_;
}
else {
local $_ = shift || $_;
$block->($_);
return $_;
}
}
और आप इसे इतना पसंद किया फोन:
print "Your name without spaces is: [", (filter { s/\s+//g } $name)
, "]\n";
प्रतिस्थापन ऑपरेटर के इंटरफेस एक अच्छा नहीं है डिज़ाइन। [(मैंने पहले ही इस तरह कुछ ऐसा कहा है।)] (Http://stackoverflow.com/questions/3319170#comment-3443516) [p5p] पर बात है (http://www.socialtext.net/perl5 /index.cgi?p5p) इसमें एक झंडा जोड़ने के लिए, यह बदली हुई स्ट्रिंग देता है। – daxim