Hi,

> How do I get this to work?

well, let's try...

>  package main;
>  use Simple.pm;

if you define the package in the same file, you dont do 'use Simple': perl
will then look in @INC for a 'Simple.pm' file,
which you dont have.
ALSO the syntax is 'use ModuleName' - so no '.pm' at the end!

>  my $var = "hello!";
>  slog("This is my message: $var.");

you'll only have 'slog' if you actually put the module in a seperate file
and use it... otherwise you have to use a fully qualified name,
say: Simple::slog( 'vars' );

>  package Simple;
>  use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
>  require Exporter;
'use' would be appropriate here - it will be checked at compile time.
'use' is equivalent to: BEGIN { require Module; import Module LIST; } ###
perldoc -f use


>  @ISA = qw(Exporter);
>  @EXPORT = qw( slog );

>  sub slog {
>
>    my $msg = @_;
 this will NOT do what you want
if you say $foo = @bar, $foo will hold the LENGTH of the array... in your
case, $msg will be '1', seeing you passed 1 string...

>    $msg_format =~ s/(\$\w+/$1/eeg;
i have NO clue what you want to do here...
but there's a syntax error in there: you never finish the ( ) capturing!
>    print $msg_format;
>  }
>
> Instead of module Simple seeing the main variable, it's trying to display
> one local to it's own package. Ultimately, what I'd like to do is:

ehm, no it's not... $var gets interpolated when you call the
slog("This is my message: $var.");
slog will only see: "This is my message: hello!." as the first (and only)
element of @_

>  - pass a localized variable to a module in a quoted string

You're doing that... well, sorta... 'package Simple' is not a module, but i
explained that above.
if you want some more insight in how modules work, and how you should write
them, perhaps my tutorial is a good place to start:
http://japh.nu/index.cgi?base=tuts has a few beginners tutorials, including
ones for OO programming.

>  - the value of the quoted variable is then inserted in a message.
 that's no problem, see my example code below

> I've played around with (caller())[0], but couldn't find the magic combo.
what magic combo were you looking for?


### working code ###
#!/usr/bin/perl -w     #ALWAYS use warnings!
use strict;                # ALWAYS use strict!
package main;

my $var = "hello!";
Simple::slog("This is my message: $var.");

package Simple;

sub slog {
   my ($msg) = @_; # dont forget the ( ) around $msg to force list context!
   print $msg;

   #$msg_format =~ s/(\$\w+)/$1/eeg; # this regexp is not matching!
   #print $msg_format;

   print "\nI just got:\n --- $msg ---\n"
}


hth,
Jos


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to