Perl 5.14 için gözden geçirilmiştir. 5.14 yana
print "Your name without spaces is: [", do { $name =~ s/\s+//gr; }
, "]\n";
.
my $name=" jason ";
print "Your name without spaces is: ["
, (map { my $a = $_; $a =~ s/\s+//g; $a } ($name))
, "]\n";
Şimdi, _ takma ve böylece değişken değiştirir $ çünkü sözlü bir kullanmak zorunda.
çıkış
Your name without spaces is: [jason]
# but: $name still ' jason '
Kuşkusuz do
gibi iyi (ve belki de daha iyi) çalışacak print "Your name without spaces is: ["
, do { my ($a = $name) =~ s/\s+//g; $a }
, "]\n";
olduğunu Ama sözcük kopyalama hala var. my
'daki ödev, bazı kişilerin tercih ettiği (beni değil) bir kısaltmadır. bu deyim için
, ben filter
diyoruz bir operatör geliştirdik: sub filter (&@) {
my $block = shift;
if (wantarray) {
return map { &$block; $_ } @_ ? @_ : $_;
}
else {
local $_ = shift || $_;
$block->($_);
return $_;
}
}
Ve şöyle diyoruz:
print "Your name without spaces is: [", (filter { s/\s+//g } $name)
, "]\n";
ikame operatörünün arayüzü iyi değil tasarımı. [(Bu kez bir kez böyle bir şey söyledim.)] (Http://stackoverflow.com/questions/3319170#comment-3443516) [p5p] 'de konuşma var (http://www.socialtext.net/perl5 /index.cgi?p5p) bir bayrak eklemek için değiştirilen dizgiyi döndürür. – daxim