Haiku generator
hypknotizzed
created: 2006-03-04 15:05:04
Hello, fellow monks. This is my first origonal program and it is a basic haiku generator. I got the idea because we are doing poetry in school and I saw the poem thing by [zentara] and thought it would be cool.
use strict;

my @line1 = ('annoying sensei',
	     'oh, young grasshopper',
	     'dis-honourable',
	     'you aburi brain'
            );

my @line2 = ('learn to run before you walk',
	     'he thinks he knows everything',
	     'insubordinate pupil',
	    );

my @line3 = ('hey, wait a minute',
	     'he must be senile',
	     'he will face my wrath',
	     'his brain is not well'
            );

print $line1[rand @line1], "\n";
print $line2[rand @line2], "\n";
print $line3[rand @line3], "\n";
Seeing as this is my first program, if anyone could give me some pointers, that would be uber.

SOA, DOA, GOA, whatever,

hypknotizzed

Re: Haiku generator
created: 2006-03-04 16:23:25
if anyone could give me some pointers, that would be uber.
Whenever you catch yourself typing the same expressions more than two times, give it a break and think: "Can I somehow express this in a loop?". In this case the outcome of such a thought would look like this code.
use strict;

my @haiku = 
(
	[
		'annoying sensei',
		'oh, young grasshopper',
		'dis-honourable',
		'you aburi brain'
	],
	[
		'learn to run before you walk',
		'he thinks he knows everything',
		'insubordinate pupil',
        ],
        [
		'hey, wait a minute',
		'he must be senile',
		'he will face my wrath',
		'his brain is not well'
	],
);

for my $line (0..2)
{
	print $haiku[$line][rand @{$haiku[$line]}], "\n";
}
Here we have a data structure (array of arrays) that holds your haiku strings. Once we have that we can easily loop over the main array an choose a random line from each "sub-array". See perlref and perlreftut for more about data structures.


holli, /regexed monk/
Re^2: Haiku generator
created: 2006-03-04 16:34:52

But then, why not just iterate through the array directly?

use warnings;
use strict;

my @haiku =
(
    [
        'annoying sensei',
        'oh, young grasshopper',
        'dis-honourable',
        'you aburi brain'
    ],
    [
        'learn to run before you walk',
        'he thinks he knows everything',
        'insubordinate pupil',
        ],
        [
        'hey, wait a minute',
        'he must be senile',
        'he will face my wrath',
        'his brain is not well'
    ],
);

for my $line (@haiku)
{
    print $$line[rand @$line], "\n";
}
Re^3: Haiku generator
created: 2006-03-04 16:48:14
Hey ambrus, thanks for the advice but I'm new so I haven't learned loops yet. Thanks for the help.

SOA, DOA, GOA, whatever,

hypknotizzed

Re^2: Haiku generator
created: 2006-03-04 16:46:21
Hey holli, thanks for the advice but I'm so new I haven't even learned loops yet. I guess I should get started on that...

SOA, DOA, GOA, whatever,

hypknotizzed

Re: Haiku generator
created: 2006-03-04 23:05:32
If you managed to do so much with so little knowledge you must be well suited to perl. Arrays are some sort of 'loops' in a linear way...
print("$_ /n") foreach (qw(this is a loop of words));

  • Landlords production is only eaten by landlords...

  • [http://knopper.net/knoppix/index-en.html|Wherever I lay my KNOPPIX disk, a new FREE LINUX nation could be established]

perlmonks.org content © perlmonks.org and ambrus, chanio, holli, hypknotizzed

prlmnks.org © 2006 edmund von der burg (eccles & toad)

v 0.03