Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

RE: mybooks.pl

by chromatic (Archbishop)
on Aug 10, 2000 at 05:24 UTC ( #27226=note: print w/replies, xml ) Need Help??


in reply to mybooks.pl

A couple of fixes and a couple of suggestions. First, the mkdir thing has a precedence problem, as tye suggests. Use parenthesis or or to fix it:
mkdir("$dir", 0777) || die "Could not mkdir \"$dir\": $!\n";
Second, the chop bothers me, 'cuz it's easy to grab something you don't want. (In this case, it's right, but I prefer chomp).

Third, there are a couple of other ways for doing your menu stuff. Some people prefer this:

($menu eq 1) && addwant(); ($menu eq 2) && addhave();
When I have to do something like this, I usually use a data structure of references:
my @actions = qw( \&addwant \&addhave ); # and so forth # get input if (defined (my $action = $actions[$menu])) { $action->(); } else { print "\n\n\nGoodbye!\n"; exit; }
Finally, if you want to clear the screen, there's a bit in perlfaq8 that might help. Not a big deal, though.

Replies are listed 'Best First'.
(zdog) RE: (2) mybooks.pl
by zdog (Priest) on Aug 10, 2000 at 09:23 UTC
    I liked your idea of using a data stucture of references, after all, I was trying to do something similar from the start, but my lack of Perl skill got in the way. Anyway, I put it into my code and there was a problem, but I fixed it by writing $actions[$menu-1] instead of $actions[$menu] since the options in the menu number from 1 to 5 while the elements of array @actions number from 0 to 4. However, I still get the following error:

    Can't use string ("\&addwant") as a subroutine ref while "strict refs" in use at mybooks.pl line 50, <STDIN> chunk 1.

    Is there any way to fix this other than by not using strict?

    Thanx.

    Zenon Zabinski | zdog | zdog7@hotmail.com

      Yes, the array of code references should not have been created using qw. That string-ifies the contents of the array, which means that you end up with an array containing ("\&addwant"), etc.

      Which isn't what you want. You want:

      my @actions = (\&addwant, \&addhave);

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://27226]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (6)
As of 2022-05-24 22:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (84 votes). Check out past polls.

    Notices?