Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

This is a quick hack for a friend. It can be improved upon. Due to a recently discovered triple extension security hole in Outlook Express and the limitations of his email filters, he wanted to be able to generate a list of all possible permutations of extensions, limited to 3 extensions per item. The extensions are in a file, one extension per line. Number of items per permutation and optional outfile can be specified on the command line.

The permutation function was borrowed from merlyn's code and is reproduced here primarily to provide useful examples of the modules mentioned in the title.

#!/usr/bin/perl -wl use strict; use Getopt::Long; use Pod::Usage; my ($IN,$OUT,$COUNT); GetOptions( 'help|?' => sub { pod2usage(-verbose => 2);exit } , 'in=s' => \$IN, 'out=s' => \$OUT, 'count=i' => \$COUNT ); die pod2usage {-verbose=>2} unless $IN; open IN, "< $IN" or die "Cannot open ($IN) for reading: $!"; chomp (my @items = <IN>); close IN; $COUNT ||= scalar @items; my @permutes; push @permutes => \@items for 1 .. @items; my %results = map { join( '',@$_[0..($COUNT-1)]) => 1 } permute(@permu +tes); if ( $OUT ) { open OUT, "> $OUT" or die "Cannot open ($OUT) for writing: $!"; print OUT $_ foreach sort keys %results; close OUT; } else { print foreach sort keys %results; } sub permute { my $last = pop @_; return map [$_], @$last unless @_; return map { my $left = $_; map [@$left, $_], @$last } permute(@_) +; } __END__ =head1 NAME permutations.pl -- A simple tool to generate permutations of items =head1 SYNOPSIS B<permutations.pl --help> for more information perl permutations.pl [options] Options: --help Display help --? Same as --help --infile File with list of items (one on each line) --outfile File to write permutations to --count Number of items in permutation =head1 DESCRIPTION This program will generate a list of all possible permutations of data + items listed in an infile. It will limit the number of items in the permuta +tions to the number of items specified in the C<--count> option. For example, +with the following items in an input file: .jpg .exe .com If you want to print all permutations with a limit of two items per permutation, you would use the following command (assuming that the in +put and output files are named C<infile.txt> and C<outfile.txt>, respectively) +. perl permutations.pl --count 2 --in infile.txt --out outfile.txt You may use shortcuts, too: perl permutations.pl -c 2 -i infile.txt -o outfile.txt The above command will result in the following output: .com.com .com.exe .com.jpg .exe.com .exe.exe .exe.jpg .jpg.com .jpg.exe .jpg.jpg If C<--count> is omitted, the count will default to the number of item +s in the infile. If C<--out> is omitted, the results will be printed to C<STDOUT>.

In reply to Permutations, Getopt::Long, and Pod::Usage by Ovid

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2024-04-19 20:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found