flipje

sinterklaas-lootjes-trekken.pl

Nov 23rd, 2012
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.92 KB | None | 0 0
  1. #!/usr/bin/perl
  2. # something
  3. # November 2012 - Flip Hess - [email protected]
  4.  
  5. use 5.10.0;
  6. use strict;
  7. use warnings;
  8. use Getopt::Long;
  9. use Data::Dumper;
  10. use List::Util qw(shuffle);
  11. use Mail::Sendmail;
  12.  
  13. #
  14. # - Global settings
  15. #
  16.  
  17. my $cheat;
  18. my $file;
  19. my $send;
  20. my $domain = "example.com";
  21. my @names = ();
  22. my @copy = ();
  23.  
  24.  
  25. #
  26. # Do the magic:
  27. #
  28.  
  29. # Get options
  30. usage() unless GetOptions(
  31.     "h|help"    => \&usage,
  32.     "c|cheat"   => \$cheat,
  33.     "f|file=s"  => \$file,
  34.     "s|send"    => \$send,
  35.  
  36. );
  37.  
  38. # exit if file not found or no options
  39. usage("Option -f not given\n") if not $file;
  40. usage("File not found\n") if not -f $file;
  41.  
  42.  
  43.     # read file and add lines to array
  44.     open (MYFILE, "$file");
  45.     while (<MYFILE>) {
  46.             my      $line = $_;
  47.             next if $line =~ /\ \s/;
  48.  
  49.             chomp($line);
  50.             push(@names, $line);
  51.  
  52.     }
  53.     close (MYFILE);
  54.  
  55.     # copy array
  56.     foreach(@names) {
  57.         push(@copy, $_);
  58.     }
  59.  
  60.     # randomize both
  61.     @copy = shuffle @copy;
  62.     @names = shuffle @names;
  63.  
  64.  
  65.     my $noneq = 'false';
  66.  
  67.     # vergelijk names[0] met copy[0], names[1] en copy[1] en zo door
  68.     # shuffle tot je een combinatie gevonden hebt waarbij geen enkel veld gelijk is.
  69.     # dit betekent dat er geen enkele naam is waar getrokken = voor
  70.  
  71.     while( $noneq ne 'true' ) {
  72.             my $count = 0;
  73.             foreach(@names) {
  74.                     if ( $_ eq $copy[$count] ) {
  75.                             @names = shuffle(@names);
  76.                             $noneq = 'false';
  77.                             last;
  78.                     } else {
  79.                             $count++;
  80.                     }
  81.                     if ( scalar(@names) == $count ) {
  82.                             $noneq = 'true';
  83.                     } else {
  84.                             $noneq = 'false';
  85.                     }
  86.             }
  87.     }
  88.  
  89.     # next counter, combine the first of both arrays as they are all nonequal
  90.     # then send a mail to voor with name getrokken
  91.     my $count = 0;
  92.     foreach(@names) {
  93.             my $getrokken = $copy[$count];
  94.             my $voor = "$_";
  95.             my $email = "$_\@$domain";
  96.             mailtje($voor, $getrokken, $email);
  97.             $count++;
  98.     }
  99.  
  100.  
  101. sub mailtje {
  102.     my $voor= shift;
  103.     my $getrokken = shift;
  104.     my $email = shift;
  105.     my $subject = "Je lootje voor het Byte Sinterklaas Feest!";
  106.  
  107.     my $message = "
  108.        To: %s,\n
  109.        Hoi %s,\n
  110.        Dit is je digitale maar desalniettemin volledig eerlijk getrokken lootje voor het Byte Sinterklaas Feest!
  111.        Je bent bij deze loting uitgekozen om een surprise of gedicht te maken voor:\n
  112.        ----> %s <----\n\n
  113.        Vriendelijke groeten van Sinterklaas\n";
  114.  
  115.     if ($cheat) {
  116.             $getrokken = "flip";
  117.     }
  118.  
  119.     if ($send) {
  120.  
  121.                 sendmail(To      => "$email",
  122.                  From            => "Sinterklaas\@$domain",
  123.                  Subject         => $subject,
  124.                  Message         => sprintf($message,$email,$voor,$getrokken)) or warn "ERROR SENDING STATUS REPORT:\n".$Mail::Sendmail::error;
  125.     } else {
  126.                 printf("
  127.        To: %s,\n
  128.        Hoi %s,\n
  129.        Dit is je digitale maar desalniettemin volledig eerlijk getrokken lootje voor het Byte Sinterklaas Feest!
  130.        Je bent bij deze loting uitgekozen om een surprise of gedicht te maken voor:\n
  131.        ----> %s <----\n\n
  132.        Vriendelijke groeten van Sinterklaas\n
  133.        =======================================\n",$email,$voor,$getrokken);
  134.     }
  135. }
  136.  
  137.  
  138. # function that shows usage
  139. sub usage {
  140.     my $msg = shift || '';
  141.     print <<END;
  142.         A Simple script to yadda yadda
  143.         One love :)
  144.  
  145.         Flip Hess - flip\@lachendemensen.com - November 2012
  146.  
  147.         Usage:
  148.          $0 [-f] file [-c] [-s]
  149.  
  150.         Example:
  151.          $0 -f file --cheat --send
  152.  
  153. END
  154.     print $msg if $msg;
  155.     exit 1;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment