Register forum user name Search FAQ

Gammon Forum

Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the password reset link.

Due to spam on this forum, all posts now need moderator approval.

 Entire forum ➜ MUSHclient ➜ Perlscript ➜ ugh help

ugh help

It is now over 60 days since the last post. This thread is closed.     Refresh page


Posted by MattMc   USA  (54 posts)  Bio
Date Sun 16 Nov 2003 12:06 AM (UTC)
Message
Errors:

Global symbol "$linkfile" requires explicit package name at (eval 2) line 4.
Global symbol "$linkfile" requires explicit package name at (eval 2) line 5.
Global symbol "$nlines" requires explicit package name at (eval 2) line 7.
Global symbol "@file" requires explicit package name at (eval 2) line 7.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 8.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 9.
Global symbol "@file" requires explicit package name at (eval 2) line 9.
Global symbol "$nlines" requires explicit package name at (eval 2) line 9.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 10.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 12.
Not enough arguments for send at (eval 2) line 12, at EOF
	(in cleanup) Global symbol "$linkfile" requires explicit package name at (eval 2) line 4.
Global symbol "$linkfile" requires explicit package name at (eval 2) line 5.
Global symbol "$nlines" requires explicit package name at (eval 2) line 7.
Global symbol "@file" requires explicit package name at (eval 2) line 7.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 8.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 9.
Global symbol "@file" requires explicit package name at (eval 2) line 9.
Global symbol "$nlines" requires explicit package name at (eval 2) line 9.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 10.
Global symbol "$returnstring" requires explicit package name at (eval 2) line 12.
Not enough arguments for send 
Line in error: 

Error number: -2147467259
Event: Execution of line 12 column 0
Called by: Immediate execution

Missing script subroutine procedue:
You have not specified a script file name:

The alias subroutine named "Advertise" could not be found.
The timer (RandomAd) subroutine named "Advertise" could not be found.

XML Error:
Line 48: Could not find all required script routines (problem in this file)
-----------Script----------

<?xml version="1.0" encoding="UTF-8"?>

<muclient>
<plugin name="Random_ads"
  author="Matt"
  language="perlscript"
  id = "982581e59ab42844527eec83"
  purpose = "Displays a random ad from time to time"
  save_state = "y"
  version = "1.1"
  requires="3.31"
  >
<description trim="y">
<![CDATA[

]]>            
</description>
</plugin>
 
<!--  =============================================

Script:  DoRandomAd
Purpose: Chooses an advertisement at random from a text file.

 =============================================  -->
 
<timers>
  <timer 
	  name="RandomAd" 
	  script="Advertise" 
	  enabled="y" 
	  second="59"
          minute="1"
	>
  </timer>
</timers>

<aliases>
  <alias
   match="doadnow"
   enabled="y"
script="Advertise" 
  >
  </alias>
</aliases>


<script>
<![CDATA[
use strict;
sub Advertise
{
$linkfile = "C:/ads.txt";
open (LINKS, "$linkfile");
srand();                        
$nlines=@file=<LINKS>;
$returnstring = "emot advertises, '";
$returnstring .= $file[int rand $nlines];
$returnstring .= "'";

world.send $returnstring;

close (LINKS);

}
]]>            
 </script>
 
 </muclient>


I'm very unfamiliar with scripting perl in mushclient, but I'm thinking I did something extremly wrong. Any help would be greatly appreciated.

The ads.txt file contains 1 line faux-ads (only about 20 of them). 1 per line, hard return at the end.
Top

Posted by Magnum   Canada  (580 posts)  Bio
Date Reply #1 on Sun 16 Nov 2003 07:17 AM (UTC)
Message
I don't know a thing about Perl, but I know that MUSHclient tries to pass one argument to any subroutine it calls from a timer. (The argument being the Timer Name). Taking a wild guess, it doesn't look like your subroutine accepts arguments.

Hopefully that's one item nailed down...

Get my plugins here: http://www.magnumsworld.com/muds/

Constantly proving I don't know what I am doing...
Magnum.
Top

Posted by David Haley   USA  (3,881 posts)  Bio
Date Reply #2 on Sun 16 Nov 2003 09:28 AM (UTC)

Amended on Sun 16 Nov 2003 09:29 AM (UTC) by David Haley

Message
use strict;

There's the source of your problem... if you know VB, that's quite similar to Option Explicit.

In other words, all of your variables need to be defined before you use them.

This is generally a good thing to have. You can remove it, but I wouldn't recommend it.

What you should do is declare all variables using "my".

e.g.

my $linkfile = "C:/ads.txt";


You don't need to do this for the file handle; that's the bareword LINKS.

Whenever you see "global symbol (...) requires explicit package name at (...) line ...", that most likely means that you are running in strict mode, and you didn't declare the variable before referring to it.

David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone

http://david.the-haleys.org
Top

Posted by Nick Gammon   Australia  (23,133 posts)  Bio   Forum Administrator
Date Reply #3 on Wed 19 Nov 2003 05:00 AM (UTC)
Message
Perl accepts arguments differently than VBscript, Magnum, so that part is probably OK.

There are example Perl scripts in the MUSHclient distribution.

Choosing one ad out of 20 sounds like the random socials plugin, you could look at how that does it. In its case it stores the messages in a variable saved in the plugin state file.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by MattMc   USA  (54 posts)  Bio
Date Reply #4 on Wed 19 Nov 2003 10:33 AM (UTC)
Message
I figured it out, but couldn't have done it without yalls help :D

Thanks for a wonderful client, Nick.


Joe
Top

The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).

To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.


29,285 views.

It is now over 60 days since the last post. This thread is closed.     Refresh page

Go to topic:           Search the forum


[Go to top] top

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.