Using map and grep

Kevin Eye

Buffalo Perl Mongers

grep

map

Putting it together

open FH, 'names.txt';
@names = <FH>;

foreach $name (@names) {
    next unless $name =~ /\w/; # filter blank lines
    @firstlast = split / /, $name;
    $lastfirst = join ', ', reverse @firstlast;
    push @rnames, $lastfirst;
    }

@sorted = sort @rnames;

foreach $name (@sorted) {
    print $name;
    }

Putting it together

open FH, 'names.txt';
@names = grep { /\w/ } <FH>;

foreach $name (@names) {

    @firstlast = split / /, $name;
    $lastfirst = join ', ', reverse @firstlast;
    push @rnames, $lastfirst;
    }

@sorted = sort @rnames;

foreach $name (@sorted) {
    print $name;
    }

Putting it together

open FH, 'names.txt';
@names = grep { /\w/ } <FH>;

foreach $name (@names) {



    push @rnames, join ', ', reverse split / /, $name;
    }

@sorted = sort @rnames;

foreach $name (@sorted) {
    print $name;
    }

Putting it together

open FH, 'names.txt';
@names = grep { /\w/ } <FH>;





@rnames = map { join ', ', reverse split / / } @names;


@sorted = sort @rnames;

foreach $name (@sorted) {
    print $name;
    }

Putting it together

open FH, 'names.txt';
@names = grep { /\w/ } <FH>;





@rnames = map { join ', ', reverse split / / } @names;


@sorted = sort @rnames;


print for @sorted;

Putting it together

open FH, 'names.txt';
@names = grep { /\w/ } <FH>;
@rnames = map { join ', ', reverse split / / } @names;
@sorted = sort @rnames;
print for @sorted;

Putting it together

open FH, 'names.txt';
print for sort
          map { join ', ', reverse split / / }
          grep { /\w/ }
          <FH>;

Putting it together

open FH, 'names.txt';

print for # see sequence of filters from bottom up
          
          # sort lines (alpha by last name)
          sort
          
          # firstname lastname -> lastname, firstname
          map { join ', ', reverse split / / }
          
          # filter out blank lines
          grep { /\w/ }
          
          # read all lines
          <FH>;

Putting it together

open FH, 'names.txt';
print for sort map { join ', ', reverse split / / } grep { /\w/ } <FH>;