Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

BOfH Random Excuse Generator

by mexnix (Pilgrim)
on May 25, 2001 at 22:01 UTC ( #83362=CUFP: print w/ replies, xml ) Need Help??

This is my first CUFP. (You have to do something when you get bored at work..) If you have any suggestions, I'm sure you do, feel free. This is sure to be a hit with Sys Admins and BOfH lovers alike. To come in future releases...:

- Automated web-based tech support
- and Bulk-Eraser function:

print "You would like more space?";
print "What did you say your username was? ";
while (<>) {
     rm -rf /home/$_
}
print "You should have plenty of space now!";

BOfH.pl:

#!/usr/bin/perl -w ############################################ # BOfH Random Excuse Generator # Word list from the BOfH Excuse board # [http://bofh.ntk.net/ExcuseBoard.html] # Copyright 2001, Simon Travaglia # # BOfH stories @ : # http://www.theregister.co.uk/content/30 # and http://bofh.ntk.net/Bastard.html # # # perl by mexnix [http://mexnix.perlmonk.org ############################################ use strict; my @words1 = qw(Temporary Intermittant Partial Redundant Total Multiplexed Inherent Duplicated Dual-Homed Synchronous Bidirectional Serial Asynchronous Multiple Replicated Non-Replicated Unregistered Non-Specific Generic Migrated Localised Resignalled Dereferenced Nullified Aborted Serious Minor Major Extraneous Illegal Insufficient Viral Unsupported Outmoded Legacy Permanent Invalid Deprecated Virtual Unreportable Undetermined Undiagnosable Unfiltered Static Dynamic Delayed Immediate Nonfatal Fatal Non-Valid Unvalidated Non-Static Unreplicatable Non-Serious); my @words2 = qw(Array Systems Hardware Software Firmware Backplane Logic-Subsystem Integrity Subsystem Memory Comms Integrity Checksum Protocol Parity Bus Timing Synchronisation Topology Transmission Reception Stack Framing Code Programming Peripheral Environmental Loading Operation Parameter Syntax Initialisation Execution Resource Encryption Decryption File Precondition Authentication Paging Swapfile Service Gateway Request Proxy Media Registry Configuration Metadata Streaming Retrieval Installation Library Handler); my @words3 = qw(Interruption Destabilisation Destruction Desynchronisation Failure Dereferencing Overflow Underflow NMI Interrupt Corruption Anomoly Seizure Override Reclock Rejection Invalidation Halt Exhaustion Infection Incompatibility Timeout Expiry Unavailability Bug Condition Crash Dump Crashdump Stackdump Problem Lockout); # Optional 4th word my @words4 = qw(Error Problem Warning Signal Flag); my $word1 = $words1[rand(scalar(@words1))]; my $word2 = $words2[rand(scalar(@words2))]; my $word3 = $words3[rand(scalar(@words3))]; my $word4 = $words4[rand(scalar(@words4))]; print "\n##############################\n"; print "#BOfH Random Excuse Generator#\n"; print "##############################\n\n"; print "Today's excuse: "; print "$word1 $word2 $word3\n\n"; print "Use Optional 4th Word?\n"; print "(Answer \"yes\" if DUMMYMODE == ON) [yes/no]"; while (<>) { if ($_ eq /yes/ or /y.*/) { print "\n$word1 $word2 $word3 $word4\n"; exit; } else { exit; } }

my %mexnix = (email => "mexnix@hotmail.com", website => "http://mexnix.perlmonk.org");

Comment on BOfH Random Excuse Generator
Download Code
Re: BOfH Random Excuse Generator
by virtualsue (Vicar) on May 26, 2001 at 13:24 UTC
    This was kinda cute, even though I don't completely understand the deal with DUMMYMODE (in the BOFH mindset, *all* users are dummies, so that should be a design assumption rather than a switch :)). I do have a few suggestions for you:

    while (<>) { if ($_ eq /yes/ or /y.*/) { print "\n$word1 $word2 $word3 $word4\n"; exit; } else { exit; } }
    Your regex has a little problem. It will match 'y' anywhere in the input, rather than at the beginning of the input string which I think is what you want. Use the ^ assertion to match at the beginning of the string. Also, if you have verified that the user has started his answer with 'y' you don't really need to check explicitly for the string 'yes'.
    See also the informative nodes Death to Dot Star! and Do not use diamond for STDIN.
    Here's a less-cluttered alternative to your while loop block:
    my $ans = <STDIN>; print "\n$word1 $word2 $word3 $word4\n" if ($ans =~ /^y/);
    or even:
    print "\n$word1 $word2 $word3 $word4\n" if (($ans = <STDIN>) =~ /^y/);
      Thanks for the help. I'm really just starting out with regex's, and I guess I should have remembered the no-no. It's my fault. Always's looking for constructive criticism (what did I just get my self into???).

      mexnix

        Don't worry about it. I ++'d your fine node, and so did a lot of other people. You posted working code that used -w & strict so, you are by definition a Righteous Dude. Everything can be improved, including what I posted.

        For instance,

        print "\n$word1 $word2 $word3 $word4\n" if (($ans = <STDIN>) =~ /^y/); could have been print "\n$word1 $word2 $word3 $word4\n" if (<STDIN> =~ /^y/i); or print "\n$word1 $word2 $word3 $word4\n" if (<STDIN> =~ /^[Yy]/);

        Updated per chromatic's suggestion to allow for case insensitive matching.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://83362]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2014-09-01 20:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (17 votes), past polls