Perl Style: Closures

  • Clone similar functions using closures.

        # from MxScreen in TSA
        no strict 'refs';
        for my $color (qw[red yellow orange green blue purple violet]) {
            *$color = sub { qq<<FONT COLOR="\U$color\E">@_</FONT>> };
        }
        undef &yellow;      # lint happiness
        *yellow = \&purple; # function aliasing
    
  • Or similarly:

        # from psgrep (in TSA, or PCB 1.18)
        my %fields;
        my @fieldnames = qw(FLAGS UID PID PPID PRI NICE SIZE
                            RSS WCHAN STAT TTY TIME COMMAND);
    
        for my $name (@fieldnames) {
            no strict 'refs';
            *$name = *{lc $name} = sub () { $fields{$name} };
        }
    

Forward to Learn to Switch with for
Back to Functions as Data
Up to index

Copyright © 1998, Tom Christiansen All rights reserved.

Tags

Feedback

Something wrong with this article? Help us out by opening an issue or pull request on GitHub

TPRF Gold Sponsor
TPRF Silver Sponsor
TPRF Bronze Sponsor