Grep returns all elements that meet the conditions in a number. Map converts all elements in the number and returns results. Both of them traverse the array, but one is used for search and the other is used for conversion. Both support expressions or code blocks.
#!/usr/bin/perl -wuse strict;#get positive numbermy @number = (1,2,3, -1,-5);my @positive_number = grep $_ > 0, @number;print "\@number: (@number)\n";print "\@positive_number: (@positive_number)\n";#get sqrtmy @sqrt_number = map sqrt $_, @positive_number;print "\@sqrt_number: (@sqrt_number)\n";#split wordsmy @lines = ( "hello world", "not too bad" );my @words = map m/\b(\w+)\b/g, @lines;print "\@lines size: " . @lines . " (@lines)\n";print "\@words size: " . @words . " (@words)\n";#modify email addressmy @email_addresses = ( "fei\@gmail.com", "fei\@sina.com.cn" );my @disguised_addresses = map {my $email = $_;$email =~ s/\@/ at /;$email =~ s/\./ dot /g;$email;} @email_addresses;print "\@email_addresses: (@email_addresses)\n";print "\@disguised_addresses: (@disguised_addresses)\n";
Reference: http://mailman.linuxchix.org/pipermail/courses/2003-November/001368.html